Zuverlässigere Datenbanken durch Fremdschlüssel in MySQL

Die beste Möglichkeit, zu verstehen, wie dies funktioniert, ist ein Beispiel. Hierzu erstellt man zwei Tabellen: Eine listet Tierarten samt den zugehörigen Codes auf (Tabellenname: species), die andere listet Tiere im Zoo auf (Tabellenname: zoo). Die Idee besteht darin, die beiden Tabellen über den Code der jeweiligen Tierart (species) zu verknüpfen, sodass nur diejenigen Einträge in der Zoo-Tabelle akzeptiert und in der Datenbank gespeichert werden, die über einen entsprechenden Code in der Tierarten-Tabelle verfügen.


Wichtig: Bei Tabellen, die nicht vom Typ Inno-DB sind, wird die FOREIGN KEY-Klausel ignoriert.

Wie dieses Beispiel illustriert, besteht nun eine Fremdschlüsselbeziehung zwischen den Feldern zoo.species und species.id. Ein Eintrag in der Zoo-Tabelle ist nur zulässig, wenn das entsprechende Feld zoo.species einem Wert im Feld species.id entspricht. Dies wird an der folgenden Ausgabe deutlich. Sie zeigt, was passiert, wenn man versucht einen Eintrag für Harry Hippopotamus mit einem ungültigen species-Code zu erstellen:


MySQL überprüft hier die species-Tabelle um zu sehen, ob der entsprechende Code vorhanden ist. Da dies nicht der Fall ist, wird der Datensatz zurückgewiesen. Zum Vergleich hier die Ausgabe, wenn man denselben Datensatz mit einem gültigen species-Code einfügt (also einem, der in der species-Tabelle vorhanden ist):


Auch hier überprüft MySQL in der species-Tabelle, ob der entsprechende Code vorhanden ist. Das stimmt in diesem Fall und so kann der Datensatz in der Zoo-Tabelle gespeichert werden.

Themenseiten: Big Data, Datenbank, SQL, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

ZDNet für mobile Geräte
ZDNet-App für Android herunterladen ZDNet-App für iOS

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Zuverlässigere Datenbanken durch Fremdschlüssel in MySQL

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *