Eine Beziehung zwischen zwei Datenbanktabellen wird hergestellt, wenn eine Tabelle einen Fremdschlüssel enthält, der auf den Primärschlüssel einer anderen Tabelle verweist. Dies ist das Grundkonzept des Begriffs relationale Datenbank.
Wie ein Fremdschlüssel funktioniert, um eine Beziehung herzustellen
Sehen wir uns die Grundlagen von Primär- und Fremdschlüsseln an. Ein Primärschlüssel identifiziert jeden Datensatz in der Tabelle eindeutig. Hierbei handelt es sich um einen Typ eines Kandidatenschlüssels, der normalerweise die erste Spalte in einer Tabelle ist und automatisch von der Datenbank generiert werden kann, um sicherzustellen, dass er eindeutig ist.
Ein Fremdschlüssel ist ein anderer Kandidatenschlüssel (nicht der Primärschlüssel), mit dem ein Datensatz mit Daten in einer anderen Tabelle verknüpft wird.
Betrachten Sie zum Beispiel diese beiden Tabellen, die angeben, welcher Lehrer welchen Kurs unterrichtet.
Hier ist der Primärschlüssel der Courses-Tabelle Course_ID. Sein Fremdschlüssel ist Teacher_ID:
Kurs-ID | Kursname | Lehrer_ID |
---|---|---|
Kurs_001 | Biologie | Lehrer_001 |
Kurs_002 | Mathematik | Lehrer_001 |
Kurs_003 | Englisch | Lehrer_003 |
Sie sehen, dass der Fremdschlüssel in Courses mit einem Primärschlüssel in Teachers übereinstimmt:
Lehrer_ID | Der Name des Lehrers |
---|---|
Lehrer_001 | Carmen |
Lehrer_002 | Veronica |
Lehrer_003 | Jorge |
Wir können sagen, dass der Fremdschlüssel Teacher_ID dazu beigetragen hat, einen Beziehung zwischen den Kursen und den Lehrertabellen.
Arten von Datenbankbeziehungen
Mit Fremdschlüsseln oder anderen Kandidatenschlüsseln können Sie drei Arten von Beziehungen zwischen Tabellen implementieren:
Eins zu eins: Diese Art von Beziehung erlaubt nur einen Datensatz auf jeder Seite der Beziehung.
Der Primärschlüssel bezieht sich nur auf einen Datensatz - oder keinen - in einer anderen Tabelle. In einer Ehe hat beispielsweise jeder Ehepartner nur einen anderen Ehepartner. Diese Art von Beziehung kann in einer einzigen Tabelle implementiert werden und verwendet daher keinen Fremdschlüssel.
Eins-zu-viele: Bei einer Eins-zu-Viele-Beziehung kann ein einzelner Datensatz in einer Tabelle mit mehreren Datensätzen in einer anderen Tabelle verknüpft werden.
Stellen Sie sich ein Unternehmen mit einer Datenbank vor, die Tabellen für Kunden und Bestellungen enthält.
Ein einzelner Kunde kann mehrere Bestellungen erwerben, eine einzelne Bestellung konnte jedoch nicht mit mehreren Kunden verknüpft werden. Daher würde die Orders-Tabelle einen Fremdschlüssel enthalten, der mit dem Primärschlüssel der Customers-Tabelle übereinstimmt, während für die Customers-Tabelle kein Fremdschlüssel auf die Orders-Tabelle verweisen würde.
Viel zu vielHinweis: Dies ist eine komplexe Beziehung, in der viele Datensätze in einer Tabelle mit vielen Datensätzen in einer anderen Tabelle verknüpft werden können. Zum Beispiel benötigt unser Unternehmen wahrscheinlich nicht nur Kunden- und Auftragstabellen, sondern wahrscheinlich auch eine Produkttabelle.
Auch hier ist die Beziehung zwischen der Tabelle "Kunden" und "Bestellungen" Eins-zu-Viele, aber berücksichtigen Sie die Beziehung zwischen der Tabelle "Bestellungen" und "Produkte". Eine Bestellung kann mehrere Produkte enthalten, und ein Produkt kann mit mehreren Bestellungen verknüpft sein: Mehrere Kunden geben möglicherweise eine Bestellung ab, die einige derselben Produkte enthält. Diese Art der Beziehung erfordert mindestens drei Tabellen.
Was sind Datenbankbeziehungen wichtig?
Das Herstellen konsistenter Beziehungen zwischen Datenbanktabellen trägt zur Gewährleistung der Datenintegrität bei und trägt zur Normalisierung der Datenbank bei. Was passiert, wenn wir beispielsweise keine Tabellen über einen Fremdschlüssel verknüpfen und stattdessen die Daten in den Tabellen "Kurse" und "Lehrer" wie folgt kombinieren:
Lehrer_ID | Der Name des Lehrers | Kurs |
---|---|---|
Lehrer_001 | Carmen | Biologie, Mathe |
Lehrer_002 | Veronica | Mathematik |
Lehrer_003 | Jorge | Englisch |
Dieser Entwurf ist unflexibel und verstößt gegen das erste Prinzip der Datenbanknormalisierung, First Normal Form (1NF), das besagt, dass jede Tabellenzelle ein einzelnes, diskretes Datenelement enthalten sollte.
Oder wir haben uns entschieden, einfach einen zweiten Datensatz für Carmen hinzuzufügen, um 1NF zu erzwingen:
Lehrer_ID | Der Name des Lehrers | Kurs |
---|---|---|
Lehrer_001 | Carmen | Biologie |
Lehrer_001 | Carmen | Mathematik |
Lehrer_002 | Veronica | Mathematik |
Lehrer_003 | Jorge | Englisch |
Dies ist immer noch ein schwaches Design, das unnötige Duplizierungen und so genannte Abläufe einführt Anomalien der Dateneinfügung , was nur bedeutet, dass es zu inkonsistenten Daten beitragen kann.
Wenn ein Lehrer beispielsweise über mehrere Datensätze verfügt, was ist, wenn einige Daten bearbeitet werden müssen, die Person, die die Datenbearbeitung durchführt, jedoch nicht erkennt, dass mehrere Datensätze vorhanden sind? Die Tabelle würde dann unterschiedliche Daten für dieselbe Person enthalten, ohne dass sie eindeutig identifiziert oder vermieden werden könnten.
Durch Aufteilen dieser Tabelle in zwei Tabellen, Lehrer und Kurse (wie oben dargestellt), wird die richtige Beziehung zwischen den Daten hergestellt und somit die Konsistenz und Genauigkeit der Daten sichergestellt.