Fachkonzept - Beziehungen zwischen Tabellen
Fremdschlüssel
Es ist oft nicht sinnvoll, alles in einer Tabelle zu speichern, da dann unter Umständen viele Daten doppelt vorhanden wären. So hat etwa Dr. Klöbner sehr viele Bilder in der Datenbank; speichert man sie mit den Benutzerdaten, dann muss vieles mehrfach abgelegt werden (z.B. E-Mail) - eine neue Fehlerquelle bei Änderungen:
Aber auch bei der Trennung von Daten in mehrere Tabellen gibt es Probleme, wie du am Beispiel der Bilder von Herrn von Bülow gesehen hast.
Solche falschen (Fachbegriff: inkonsistente) oder mehrfach gespeicherte (Fachbegriff: redundante) Daten versucht man zu vermeiden.
Dazu werden die Daten in mehrere Tabellen aufgetrennt und Verweise zeigen dann nur auf "verwandte" Daten.
So sieht das im Beispiel zwischen Benutzer und Bild-Tabelle aus:
Mit der Aufteilung werden alle Benutzerdaten (auch der Name) nur noch in einem Datensatz gespeichert - es gibt also keine redundaten Daten. Die Inkonsistenzen in den Schreibweisen der Namen werden durch das Einfügen von Schlüsseln verhindert.
Ein Fremdschlüssel ist ein Attribut in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist.
Ist der Primärschlüssel aus mehreren Attributen zusammengesetzt, so müssen auch alle Fremdschlüssel aus diesen Attributen bestehen. Das versucht man in der Regel aber zu vermeiden.
Merkhilfe: Einen Fremdschlüssel kannst du dir ähnlich vorstellen wie ein Link im Internet. Suchst du z.B. in Wikipedia den Artikel zu Deutschland und willst dann mehr über Europa wissen, so gelangst du über einen Link zu den gespeicherten Daten zu Europa. Wieder werden die Daten zu Europa separat gespeichert, um sie nicht (redundant) mehrfach zu speichern.
Über den Fremdschlüssel werden zwei Tabellen miteinander verbunden. Dies stellt eine Beziehung zwischen zwei Tabellen dar. Beziehungen sind nach den Tabellen das zweite wichtige Konzept von relationalen Datenbanken.
Ein relationales Datenbanksystem kann solche Beziehungen garantieren. Das bedeutet, dass nur Werte in den Fremdschlüsseln erlaubt werden, die auch in der Haupttabelle vorhanden sind. Du kannst also z.B. kein Bild mit der PNR "2222" speichern - einen solchen Schlüsselwert gibt es in der benutzer-Tabelle nicht.
Das Datenbanksystem erzeugt dann eine Fehlermeldung, dass eine Bedingung (constraint) verletzt wurde: