Informatik · Klasse 11–13 · aktualisiert
Fremdschlüssel: Beziehungen in Datenbanken verstehen
Du lernst, Primär- und Fremdschlüssel zu unterscheiden, Verbindungen in Tabellen zu lesen und die Absicherung in SQL zu erklären.
0 von 8 Aufgaben gelöst
Kurz gesagt
Der Primärschlüssel ist der eigene, eindeutige Schlüssel einer Tabelle. Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen oder derselben Tabelle und verbindet so Datensätze. Referenzielle Integrität heißt: Er darf nur auf existierende Datensätze zeigen.
In einer Bibliotheksdatenbank steht bei einer Ausleihe nicht der volle Name samt Buchtitel. Es steht nur eine Nummer, die auf eine andere Tabelle zeigt. So wird jede Information nur genau einmal gespeichert. Diese Nummern sind Fremdschlüssel, und du lernst hier, wie sie funktionieren und abgesichert werden.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
3 Abschnitte
Eine Tabelle besteht aus Zeilen. Jede Zeile ist ein Datensatz. Damit man einen Datensatz sicher findet, braucht er einen Schlüssel. Das ist eine Spalte oder eine Gruppe von Spalten, deren Werte jede Zeile eindeutig machen.
Pro Tabelle gibt es ein oder mehrere Schlüsselkandidaten. Das sind Spaltenkombinationen, die als Schlüssel möglich wären. Einer davon wird als Primärschlüssel ausgewählt. Der Primärschlüssel ist der eigene Schlüssel des Datensatzes. Er sollte sich zeitlich nicht ändern. Er kann auch aus mehreren Attributen bestehen. Dann heißt er zusammengesetzter Primärschlüssel.
Ein Fremdschlüssel ist etwas anderes: Er ist ein Attribut (oder mehrere Attribute zusammen), das auf einen Primärschlüssel verweist. Wenn sich eine andere Tabelle auf eine Tabelle bezieht, steht dort deren Primärschlüssel als Fremdschlüssel, um auf einen Datensatz zu zeigen. Statt auf den Primärschlüssel kann er auch auf einen Schlüsselkandidaten verweisen. Die Tabelle, auf die er zeigt, kann eine andere oder dieselbe Tabelle sein. Ein Fremdschlüssel ist nicht zwingend eindeutig. Tabellen ganz ohne Fremdschlüssel heißen flache Tabellen.
Kurz: Der Primärschlüssel kennzeichnet die eigene Zeile. Der Fremdschlüssel zeigt auf eine Zeile in einer anderen oder derselben Tabelle. In einer Bibliothek ist bei der Tabelle Entliehen die Kombination (Nutzer-ID, Buch-ID) der Schlüssel. Jedes der beiden Attribute einzeln ist ein Fremdschlüssel.
Definition
Fremdschlüssel
Ein Fremdschlüssel ist ein Attribut oder eine Attributkombination einer Tabelle. Er verweist auf einen Primärschlüssel einer anderen oder derselben Tabelle.
Beispiel: Personalnummer als Fremdschlüssel (ausgedachtes Muster)
- 1Ausgedachtes Muster einer Firmendatenbank: Eine Tabelle hat die Attribute Personalnummer, Name, Abteilung und Beschäftigung.
- 2Die Personalnummer ist dort höchstwahrscheinlich der Primärschlüssel.
- 3Eine weitere Tabelle hat die Attribute Vorgesetzter und Untergebener. In beiden steht jeweils eine Personalnummer.
- 4Diese beiden Attribute sind Fremdschlüssel, denn sie verweisen auf die Personalnummer.
- 5Mit der Nummer allein kann man wenig anfangen. Name und Abteilung findest du über den Verweis in der ersten Tabelle.
Teste dich
Eine Bibliothek kann mit drei Tabellen arbeiten. Nutzer hat die Attribute Nutzer-ID, Vorname und Nachname. Buch hat die Buch-ID, den Titel und weitere Angaben. Entliehen hat nur die Attribute Nutzer-ID und Buch-ID.
In Nutzer stehen unter anderem die Zeilen 10 (Hans Vielleser), 11 (Jens Mittelleser) und 12 (Erich Wenigleser). In Buch stehen unter anderem die Zeilen 100 (Wir lernen SQL), 200 (Drucken leicht gemacht), 300 (Mein Leben mit Asterix), 400 (Eppur si muove) und 500 (Adam und Eva).
Jede Zeile der Tabelle Entliehen ordnet einer Nutzer-ID eine Buch-ID zu. So gehst du vor: Nimm die Zahl aus Entliehen. Suche sie im Primärschlüssel der anderen Tabelle. Dort steht der verbundene Datensatz. Die Tabelle mit dem Fremdschlüssel nennt man auch Detailtabelle. Hier ist das Entliehen.
So müssen Informationen nicht doppelt gespeichert werden. Bei Vorlesungsteilnehmern steht zum Beispiel nicht Name und Adresse, sondern nur die Matrikelnummer. Daraus ergeben sich alle weiteren Angaben.
Wie viele Datensätze miteinander verbunden sein können, hängt vom Beziehungstyp ab. R und S sind dabei zwei Tabellen. Bei einer 1:1-Beziehung ist jedem Datensatz aus R höchstens ein Datensatz aus S zugeordnet und jedem Datensatz aus S höchstens ein Datensatz aus R. Bei einer 1:n-Beziehung können einem Datensatz aus R kein, ein oder mehrere Datensätze aus S zugeordnet sein, aber jedem Datensatz aus S höchstens ein Datensatz aus R. Bei einer n:m-Beziehung können auf beiden Seiten mehrere Datensätze zugeordnet sein. Bei einer 1:1- und bei einer 1:n-Beziehung enthält S den Primärschlüssel aus R als Fremdschlüssel. Für eine n:m-Beziehung braucht man eine eigene Tabelle, die die Primärschlüssel beider Tabellen als Fremdschlüssel enthält. Auch Entliehen enthält die Primärschlüssel zweier Tabellen als Fremdschlüssel.
| Nutzer-ID | Buch-ID | Verbundene Datensätze |
|---|---|---|
| 10 | 300 | Hans Vielleser – Mein Leben mit Asterix |
| 10 | 200 | Hans Vielleser – Drucken leicht gemacht |
| 11 | 100 | Jens Mittelleser – Wir lernen SQL |
| 12 | 400 | Erich Wenigleser – Eppur si muove |
Beispiel: Die Zeile (10, 300) in Entliehen lesen
- 1Zeile in Entliehen: Nutzer-ID 10, Buch-ID 300
- 2Nutzer-ID 10 führt zur Zeile 10 in Nutzer: Hans Vielleser
- 3Buch-ID 300 führt zur Zeile 300 in Buch: Mein Leben mit Asterix
- 4Der Eintrag heißt also: Hans Vielleser hat dieses Buch entliehen.
- 5Die Zeile (10, 200) verbindet denselben Nutzer 10 mit dem Buch Drucken leicht gemacht.
Teste dich
Die referenzielle Integrität (auch referentielle Integrität oder Beziehungsintegrität) besagt: Jeder Attributwert eines Fremdschlüssels muss auch als Attributwert des Primärschlüssels vorhanden sein. Datensätze dürfen über ihre Fremdschlüssel nur auf existierende Datensätze verweisen. Technisch wird das über den Fremdschlüssel umgesetzt. Fremdschlüssel und Primärschlüssel müssen vom selben oder einem kompatiblen Datentyp sein.
Das Datenbanksystem stellt sicher, dass nur Verweise auf existierende Datensätze möglich sind. Es prüft das beim Anlegen oder Löschen von Datensätzen und beim Ändern von Schlüsselfeldern. Zwei Regeln gelten dabei:
Regel 1: Ein neuer Datensatz mit Fremdschlüssel kann nur eingefügt werden, wenn in der referenzierten Tabelle ein Datensatz mit passendem Primärschlüsselwert existiert.
Regel 2: Ein Datensatz mit Primärschlüssel kann nur gelöscht oder in seinem Schlüssel geändert werden, wenn keine abhängigen Datensätze zu ihm in Beziehung stehen.
Verstößt eine Operation gegen die Regeln, gibt es eine Fehlermeldung. Der Datenbestand bleibt unverändert. Bei der Löschung gibt es auch eine Alternative: Der abhängige Datensatz wird gleich mitgelöscht (Löschweitergabe). Bei einer Schlüsseländerung kann eine Änderungsweitergabe die Fremdschlüssel in den abhängigen Datensätzen anpassen, statt die Änderung abzulehnen. Ohne Absicherung könnten inkonsistente Daten entstehen. Dann wäre bei der automatischen Verarbeitung zum Beispiel keine Versandadresse und kein Rechnungsempfänger bekannt. Jede Prüfung kostet allerdings Rechnerressourcen, insbesondere Zeit.
In SQL legst du den Fremdschlüssel beim Erzeugen der Tabelle mit CREATE TABLE fest. Die allgemeine Form lautet: FOREIGN KEY (Attributliste) REFERENCES Tabellenname (Attributliste). Ein Beispiel ist FOREIGN KEY (PersNr) REFERENCES Professor (PersNr) in der Tabelle Vorlesung. Dann kannst du mit INSERT INTO in Vorlesung nur Datensätze einfügen, deren PersNr in Professor als Primärschlüssel vorkommt.
Merke: Jeder Wert eines Fremdschlüssels muss als Primärschlüsselwert vorhanden sein. Das nennt man referenzielle Integrität. Verstößt eine Operation dagegen, gibt es eine Fehlermeldung und der Datenbestand bleibt unverändert.
Beispiel: Einen kundenbezogenen Datensatz löschen
- 1Ein Shop hat die Tabellen KUNDE und BESTELLUNG. Die Bestellung enthält einen Fremdschlüssel auf den Kunden.
- 2Ohne Löschweitergabe: Das Löschen eines Kunden wird abgelehnt, solange Bestellungen dieses Kunden existieren.
- 3Mit Löschweitergabe: Die Bestellungen werden mitgelöscht. Man nennt das kaskadierendes Löschen.
- 4In beiden Fällen bleibt keine Bestellung zurück, die auf einen Kunden zeigt, den es nicht mehr gibt.
Teste dich
Alles auf einen Blick
Fremdschlüssel
Primärschlüssel
der ausgewählte Schlüsselkandidat, der eigene Schlüssel des Datensatzes
Fremdschlüssel
verweist auf einen Primärschlüssel einer anderen oder derselben Tabelle und ist nicht zwingend eindeutig
Tabellenwerte lesen
Den Fremdschlüsselwert im Primärschlüssel der anderen Tabelle suchen, dort steht der verbundene Datensatz
Verknüpfungstabelle
Eine n:m-Beziehung braucht eine eigene Tabelle mit den Primärschlüsseln beider Tabellen als Fremdschlüssel
Referenzielle Integrität
Fremdschlüsselwerte müssen als Primärschlüsselwerte vorhanden sein
SQL
FOREIGN KEY (Attributliste) REFERENCES Tabellenname (Attributliste) beim Erzeugen der Tabelle mit CREATE TABLE
Musteraufgabe · Schritt für Schritt
Kurse und Lehrer verknüpfen (ausgedachtes Beispiel)
- 1Annahme: Die Tabelle Lehrer (LehrerNr, Name) existiert, LehrerNr hat den Datentyp INT und ist ihr Primärschlüssel. Sie enthält die Zeilen 3 und 5.
- 2Die Tabelle Kurs soll LehrerNr als Fremdschlüssel erhalten, ebenfalls mit dem Datentyp INT. Die Datentypen passen also zusammen.
- 3Schritt 1, allgemeine Form: FOREIGN KEY (Attributliste) REFERENCES Tabellenname (Attributliste)
- 4Schritt 2: CREATE TABLE Kurs (KursNr INT NOT NULL PRIMARY KEY, Titel VARCHAR NOT NULL, LehrerNr INT NOT NULL, FOREIGN KEY (LehrerNr) REFERENCES Lehrer (LehrerNr));
- 5Schritt 3: Ein Kurs mit LehrerNr 5 ist möglich, denn 5 kommt in Lehrer als Primärschlüssel vor.
- 6Schritt 4: Ein Kurs mit LehrerNr 7 wird abgelehnt, denn 7 fehlt in Lehrer. Es gibt eine Fehlermeldung, der Bestand bleibt unverändert.
Fehler finden
Prüfe die Aussagen zur Teilnehmertabelle einer Vorlesung In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Das Löschen eines Studenten, der schon eine Vorlesung belegt hat, ist nicht einfach möglich. Richtig: Das Löschen wird entweder verhindert (Fehlermeldung) oder der Datensatz wird auch aus der Teilnehmertabelle entfernt (Löschweitergabe).
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Der eigene Schlüssel eines Datensatzes heißt . Einen Fremdschlüssel legst du in SQL beim Erzeugen der Tabelle mit fest. Ohne Löschweitergabe wird das Löschen eines Kunden , solange Bestellungen dieses Kunden existieren.
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback