Informatik

Fremdschlüssel: Beziehungen in Datenbanken verstehen

Fremdschlüssel: Beziehungen in Datenbanken verstehen
Fremdschlüssel: Beziehungen in Datenbanken verstehen
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

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.

Deine Lernziele

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.

Definition

Datensatz

Ein Datensatz ist eine Zeile einer Tabelle. Er bündelt die Werte, die zu einem einzelnen Objekt oder Vorgang gehören.

Definition

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.

Definition

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.

Beispiel

Die Tabelle Kunden enthält:

Kunden_IDName
1Aylin
2Ben

Die Tabelle Bestellungen enthält:

Bestell_IDKunden_IDArtikel
1012Tablet
1021Kopfhörer
1032Tastatur

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.

Merke

Der Primärschlüssel sagt: Welcher Datensatz ist das? Der Fremdschlüssel sagt: Mit welchem Datensatz der anderen Tabelle gehört dieser Datensatz zusammen?

Teste dich
Frage 1 von 1LeichtWelche Spalte ist im Beispiel der Fremdschlüssel?
Lösung: Bestellungen.Kunden_ID — Ein Fremdschlüssel steht in der verweisenden Tabelle und enthält Werte des Primärschlüssels der referenzierten Tabelle.
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:

  1. Suche in der referenzierten Tabelle ein Feld, das die Datensätze eindeutig kennzeichnet.
  2. Suche in der verweisenden Tabelle das Feld, das Werte dieses Primärschlüssels übernimmt.
  3. Prüfe an den Werten, auf welche Zeile jeder Fremdschlüssel zeigt.
Beispiel

In Hersteller ist Hersteller_ID eindeutig:

Hersteller_IDHerstellername
1Shoe-Land
2Bekleidungsdepot
3All-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.

Gut zu wissen

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.

Teste dich
Frage 1 von 1MittelGegeben sind Marken(Marke_ID, Marke_Name) und Fahrzeuge(Fahrzeug_ID, Marke_ID, PS). Wo liegt der Fremdschlüssel?
Lösung: Fahrzeuge.Marke_ID — Die Fahrzeugzeile braucht die Kennung ihrer Marke. Deshalb übernimmt Fahrzeuge.Marke_ID Werte aus Marken.Marke_ID.
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üsselabhängige Tabelle.Fremdschlüssel

Der Pfeil bedeutet: Der Fremdschlüsselwert wird in der Mastertabelle nachgeschlagen.

Beispiel

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.

Merke

Eindeutig auf der Primärschlüsselseite, wiederholbar auf der Fremdschlüsselseite. So lässt sich eine Eins-zu-viele-Beziehung abbilden.

Lückentext

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.

Lösungen: Lücke 1: Primärschlüssel; Lücke 2: Fremdschlüssel; Lücke 3: mehrfach. Entscheidend ist die Rolle in der jeweiligen Tabelle: eindeutig identifizieren in 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.

Beispiel

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.

Merke

Vor dem Einfügen eines Fremdschlüsselwerts fragst du: Existiert der passende Primärschlüsselwert in der referenzierten Tabelle?

Teste dich
Frage 1 von 1MittelDie Kundentabelle enthält die IDs 1, 2 und 3. Welche neue Bestellung erhält einen gültigen Fremdschlüsselwert?
Lösung: Bestell_ID 104, Kunden_ID 3 — Ein Fremdschlüsselwert ist hier nur gültig, wenn derselbe Wert als Primärschlüssel in der Kundentabelle vorhanden ist.
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.

Beispiel

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.

Teste dich
Frage 1 von 1MittelWas bedeutet REFERENCES Kunden(Kunden_ID)?
Lösung: Die Fremdschlüsselwerte beziehen sich auf Kunden.Kunden_ID. — Die Klausel nennt genau die Tabelle und das Feld, auf deren gültige Schlüsselwerte verwiesen wird.
Karteikasten

Rufe die Begriffe zuerst aus dem Gedächtnis ab und klappe danach die Erklärung auf.

Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • 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.

Teste dich
Frage 1 von 3LeichtWelche Aussage unterscheidet Primär- und Fremdschlüssel richtig?
Lösung: Der Primärschlüssel identifiziert eindeutig; der Fremdschlüssel verweist auf einen Datensatz einer anderen Tabelle. — Die beiden Schlüssel können passende Werte enthalten, haben aber verschiedene Aufgaben.
Frage 2 von 3MittelIn Projekte(Projektnr, Bezeichnung, Leitung) steht bei Projekt 200 der Wert 34567 in Leitung. In Personal(Personalnr, Name) gehört 34567 zu Marlene. Was folgt daraus?
Lösung: Marlene leitet Projekt 200. — Projekte.Leitung verweist auf Personal.Personalnr; deshalb führt der Wert 34567 zum Personaldatensatz von Marlene.
Frage 3 von 3SchwerEine Artikeltabelle enthält den Fremdschlüsselwert Hersteller_ID = 4, die Herstellertabelle aber nur die IDs 1, 2 und 3. Wie beurteilst du den Datensatz?
Lösung: Der Verweis verletzt die referenzielle Integrität, weil der Zielwert 4 fehlt. — Ein Fremdschlüssel stellt nur dann eine gültige Beziehung her, wenn sein Zielwert in der referenzierten Tabelle existiert.

Passend dazu