Fremdschlüssel: Beziehungen in Datenbanken verstehen
Ein Fremdschlüssel ist ein Feld in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist. So speichert eine Datenbank zusammengehörige Angaben getrennt, ohne ihre Beziehung zu verlieren. Du lernst, Fremdschlüssel in Tabellen zu erkennen, ihre Werte zu verfolgen und ungültige Verweise zu erklären.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Eine Beziehung wird zur Spalte
Stell dir vor, Kundendaten und Bestellungen stehen in zwei Tabellen. Eine Bestellung soll zu genau dem Kunden führen, der sie aufgegeben hat. Dafür übernimmt die Bestelltabelle die Kennung des Kunden.
Datensatz
Ein Datensatz ist eine Zeile einer Tabelle. Er bündelt die Werte, die zu einem einzelnen Objekt oder Vorgang gehören.
Primärschlüssel
Ein Primärschlüssel ist ein Feld oder eine Kombination von Feldern, die jeden Datensatz einer Tabelle eindeutig kennzeichnet. Derselbe Primärschlüsselwert darf in dieser Tabelle nicht zweimal vorkommen.
Fremdschlüssel
Ein Fremdschlüssel ist ein Feld oder eine Feldgruppe, deren Werte auf Primärschlüsselwerte einer anderen Tabelle verweisen. Er stellt damit die Beziehung zwischen den Datensätzen her.
Die Tabelle Kunden enthält:
| Kunden_ID | Name |
|---|---|
| 1 | Aylin |
| 2 | Ben |
Die Tabelle Bestellungen enthält:
| Bestell_ID | Kunden_ID | Artikel |
|---|---|---|
| 101 | 2 | Tablet |
| 102 | 1 | Kopfhörer |
| 103 | 2 | Tastatur |
Kunden.Kunden_ID ist der Primärschlüssel der Kundentabelle. Bestellungen.Kunden_ID ist ein Fremdschlüssel. Der Wert 2 in Bestellung 101 führt zur Kundenzeile mit Kunden_ID 2: Ben hat das Tablet bestellt.
Der Primärschlüssel sagt: Welcher Datensatz ist das? Der Fremdschlüssel sagt: Mit welchem Datensatz der anderen Tabelle gehört dieser Datensatz zusammen?
Fremdschlüssel sicher erkennen
Gleiche Spaltennamen sind ein Hinweis, aber noch kein Beweis. Entscheidend ist die festgelegte Beziehung zwischen den Tabellen.
Gehe in drei Schritten vor:
- Suche in der referenzierten Tabelle ein Feld, das die Datensätze eindeutig kennzeichnet.
- Suche in der verweisenden Tabelle das Feld, das Werte dieses Primärschlüssels übernimmt.
- Prüfe an den Werten, auf welche Zeile jeder Fremdschlüssel zeigt.
In Hersteller ist Hersteller_ID eindeutig:
| Hersteller_ID | Herstellername |
|---|---|
| 1 | Shoe-Land |
| 2 | Bekleidungsdepot |
| 3 | All-in-One GbR |
In Artikel stehen die Werte 3, 3 und 1 in der Spalte Hersteller_ID. Deshalb verweist Artikel.Hersteller_ID auf Hersteller.Hersteller_ID. Die beiden Datensätze mit dem Wert 3 gehören zu All-in-One GbR.
Der Tabellenname gehört zur eindeutigen Bezeichnung eines Feldes. Hersteller.Hersteller_ID und Artikel.Hersteller_ID heißen ähnlich, erfüllen aber verschiedene Rollen: einmal Primärschlüssel, einmal Fremdschlüssel.
Wiederholte Werte sind hier erlaubt
Ein Primärschlüssel muss in seiner Tabelle eindeutig sein. Ein Fremdschlüssel darf dagegen mehrfach vorkommen: Mehrere Bestellungen können zu demselben Kunden und mehrere Artikel zu demselben Hersteller gehören.
Das typische Muster lautet:
Mastertabelle.Primärschlüssel ← abhängige Tabelle.Fremdschlüssel
Der Pfeil bedeutet: Der Fremdschlüsselwert wird in der Mastertabelle nachgeschlagen.
In der Herstellertabelle kommt Hersteller_ID 3 genau einmal vor. In der Artikeltabelle darf der Fremdschlüsselwert 3 mehrfach stehen. Das erzeugt keine doppelten Herstellerdatensätze, sondern verbindet mehrere Artikel mit demselben Hersteller.
Hersteller 2 wird von keinem sichtbaren Artikel verwendet. Auch das ist möglich: Ein Primärschlüsselwert muss nicht zwingend als Fremdschlüssel erscheinen.
Eindeutig auf der Primärschlüsselseite, wiederholbar auf der Fremdschlüsselseite. So lässt sich eine Eins-zu-viele-Beziehung abbilden.
Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.
In Kunden ist Kunden_ID der . In Bestellungen ist Kunden_ID der . Derselbe Kundenwert darf dort vorkommen, weil ein Kunde mehrere Bestellungen haben kann.
Kunden, auf diesen Datensatz verweisen in Bestellungen.Kunden, auf diesen Datensatz verweisen in Bestellungen.Gültige Verweise schützen die Daten
Ein Fremdschlüsselwert soll zu einem vorhandenen Primärschlüsselwert passen. Diese Bedingung heißt referenzielle Integrität. Sie verhindert verwaiste Datensätze.
Angenommen, die Kundentabelle enthält nur die IDs 1 und 2. Eine neue Bestellung mit Kunden_ID 2 ist gültig. Eine Bestellung mit Kunden_ID 7 wäre verwaist, weil kein Kunde mit der ID 7 existiert.
Wird ein referenzierter Datensatz geändert oder gelöscht, muss die Datenbank festlegen, was mit abhängigen Datensätzen geschieht. Datenbanksysteme können Änderungen ablehnen oder durch festgelegte Cascading Actions auf verbundene Datensätze übertragen. Welche Aktion sinnvoll ist, hängt vom Datenmodell ab.
Vor dem Einfügen eines Fremdschlüsselwerts fragst du: Existiert der passende Primärschlüsselwert in der referenzierten Tabelle?
Fremdschlüssel in SQL festlegen
In SQL werden die beiden Rollen ausdrücklich notiert. Zuerst erhält die referenzierte Tabelle ihren Primärschlüssel. Danach legt die abhängige Tabelle fest, welches Feld darauf verweist.
Die entscheidenden SQL-Bestandteile sind:
- In
Kunden:Kunden_ID INT PRIMARY KEY - In
Bestellungen:Kunden_ID INT - In
Bestellungen:FOREIGN KEY (Kunden_ID) REFERENCES Kunden(Kunden_ID)
FOREIGN KEY (Kunden_ID) benennt das Feld in der aktuellen Tabelle. REFERENCES Kunden(Kunden_ID) nennt die referenzierte Tabelle und ihren Primärschlüssel.
Schlüssel ermöglichen später gemeinsame Abfragen über einen JOIN: Die Datenbank vergleicht passende Schlüsselwerte und führt die zugehörigen Angaben im Abfrageergebnis zusammen. Die Daten bleiben dabei in getrennten Tabellen gespeichert.
Karteikasten
Rufe die Begriffe zuerst aus dem Gedächtnis ab und klappe danach die Erklärung auf.
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- Fremdschlüssel
- verbindet Tabellen über den Primärschlüssel einer anderen Tabelle
- steht in der abhängigen Tabelle
- verweist auf einen vorhandenen Wert der Mastertabelle
- darf denselben Zielwert mehrfach enthalten
- schützt mit gültigen Verweisen die referenzielle Integrität
- wird in SQL mit `FOREIGN KEY` und `REFERENCES` festgelegt
Abschluss-Check
Prüfe jetzt, ob du Schlüsselrollen erkennen, Beziehungen verfolgen und gültige Verweise beurteilen kannst.
Mit Google fortfahren