Was ist eine Datenbankbeziehung?

Eine Beziehung wird zwischen zwei Datenbanktabellen hergestellt, wenn eine Tabelle a. verwendet Unbekannter Schlüssel das verweist auf die Primärschlüssel eines anderen Tisches. Dies ist das Grundkonzept hinter dem Begriff relationale Datenbank.

Wie ein Fremdschlüssel funktioniert, um eine Beziehung aufzubauen

Ein Primärschlüssel identifiziert jeden Datensatz in der Tabelle eindeutig. Es ist eine Art von Kandidatenschlüssel Dies ist normalerweise die erste Spalte in einer Tabelle und kann automatisch von der Datenbank generiert werden, um sicherzustellen, dass sie eindeutig ist. Ein Fremdschlüssel ist ein weiterer Kandidatenschlüssel (nicht der Primärschlüssel), der verwendet wird, um einen Datensatz mit Daten in einer anderen Tabelle zu verknüpfen.

Betrachten Sie zum Beispiel diese beiden Tabellen, aus denen hervorgeht, 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_002
Kurs_003 Englisch Lehrer_003

Sie können sehen, dass der Fremdschlüssel in Courses mit einem Primärschlüssel in Teachers übereinstimmt:

Lehrer_ID Name des Lehrers
Lehrer_001 Carmen
Lehrer_002 Veronika
Lehrer_003 Jorge

Wir können sagen, dass der Fremdschlüssel Teacher_ID dazu beigetragen hat, eine Beziehung zwischen den Tabellen Courses und Teachers herzustellen.

Ein Diagramm auf einem Computerbildschirm
Glow / Getty Images

Arten von Datenbankbeziehungen

Mithilfe von Fremdschlüsseln oder anderen Kandidatenschlüsseln können Sie drei Arten von Beziehungen zwischen Tabellen implementieren:

Eins zu eins

Dieser Beziehungstyp lässt nur einen Datensatz auf jeder Seite der Beziehung zu. 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

Eine 1:n-Beziehung ermöglicht es, einen einzelnen Datensatz in einer Tabelle mit mehreren Datensätzen in einer anderen Tabelle zu verknüpfen. Stellen Sie sich ein Unternehmen mit einer Datenbank vor, die über Tabellen für Kunden und Bestellungen verfügt.

Ein einzelner Kunde kann mehrere Bestellungen kaufen, aber eine einzelne Bestellung kann 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 die Customers-Tabelle keinen Fremdschlüssel hat, der auf die Orders-Tabelle zeigt.

Viel zu viel

Dies ist eine komplexe Beziehung, bei der viele Datensätze in einer Tabelle mit vielen Datensätzen in einer anderen Tabelle verknüpft werden können. Unser Unternehmen benötigt beispielsweise wahrscheinlich die Tabellen Customers und Orders und wahrscheinlich auch eine Products-Tabelle.

Auch hier ist die Beziehung zwischen der Tabelle "Kunden" und "Bestellungen" eins-zu-viele, aber bedenken 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, da mehrere Kunden möglicherweise eine Bestellung aufgeben, die einige der gleichen Produkte enthält. Diese Art von Beziehung erfordert mindestens drei Tabellen.

Warum sind Datenbankbeziehungen wichtig?

Das Einrichten konsistenter Beziehungen zwischen Datenbanktabellen trägt zur Sicherstellung der Datenintegrität bei und trägt zur Normalisierung der Datenbank bei. Was wäre beispielsweise, wenn wir keine Tabellen über einen Fremdschlüssel verknüpfen und stattdessen die Daten in den Tabellen "Kurse" und "Lehrer" wie folgt kombinieren:

Lehrer_ID Name des Lehrers Kurs
Lehrer_001 Carmen Biologie, Mathematik
Lehrer_002 Veronika Mathematik
Lehrer_003 Jorge Englisch

Dieses Design ist unflexibel und verletzt das erste Prinzip der Datenbanknormalisierung, First Normal Form, das besagt, dass jede Tabellenzelle ein einzelnes, diskretes Datenelement enthalten sollte.

Oder vielleicht haben wir uns entschieden, einen zweiten Rekord für Carmen hinzuzufügen, um 1NF durchzusetzen:

Lehrer_ID Name des Lehrers Kurs
Lehrer_001 Carmen Biologie
Lehrer_001 Carmen Mathematik
Lehrer_002 Veronika Mathematik
Lehrer_003 Jorge Englisch

Dies ist immer noch ein schwaches Design, das unnötige Duplizierungen und sogenannte Dateneinfügungsanomalien einführt, was bedeutet, dass es zu inkonsistenten Daten beitragen könnte. 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 es eine eindeutige Möglichkeit gibt, sie zu identifizieren oder zu vermeiden.

Das Aufteilen dieser Tabelle in zwei Tabellen, Lehrer und Kurse, stellt die richtige Beziehung zwischen den Daten her und trägt somit dazu bei, die Datenkonsistenz und -genauigkeit sicherzustellen.