Moin!
Ok hier das Create Statement:
Daran ist schon einiges zu kritisieren.
Allen voran: Du willst zwar Konstrukte wie Foreign Keys verwenden, aber das gelingt dir nicht, weil du MyISAM als Storage-Engine benutzt. MyISAM ist schnell, aber unterstützt viele Features nicht, die man gelegentlich haben will - darunter sowas wie Transaktionen, Trigger, Foreign Keys, Stored Procedures etc. Neben etlichen anderen Storage Engines bietet InnoDB diese Features an.
Aufgrund der falschen Storage Engine ist die Tabelle keys in deinem jetzigen Modell absolut funktionslos, und damit sinnlos. Abgesehen davon würde man sie vermutlich auch sonst nicht so realisieren.
Die alles entscheidende Frage ist: Woher kommen diese Keys, und was soll damit gemacht werden?
Tabelle keys:
keys
0001AF
000F19
001B9E
Vernünftig wäre, die Keys an dieser Stelle einer künstlichen ID zuzuordnen, die numerisch ist, und die überall sonst ausschließlich für die Zuordnung von Datensätzen zum Key genutzt wird.
Im übrigen sieht es so aus, als handele es sich hier um hexadezimale Zahlen. Die würde ich sowieso nie als String abspeichern, sondern immer als passenden INTEGER-Wert - je nach Wertebereich ggf. auch BIGINT, unsigned und ggf. mit passendem ZEROFILL.
Tabelle name:
id value key
1 Mustermann 0001AF
2 Huber 000F19
3 Huber jun. 000F19
4 Meier 001B9ETabelle ort:
id value key
1 Hamburg 0001AF
2 Berlin 000F19
3 Berlin 000F19
4 Dresden 001B9E
Warum ist 000F19 doppelt in beiden Tabellen?
Die Tabelle keys hab ich deswegen angelegt, um eine Tabelle zu haben, die alle keys genau einmal enthält.
Mangels der Funktion der Foreign Keys in MyISAM bringt dir das exakt garnichts zur Zeit.
- Sven Rautenberg