Fremdschlüssel SQL: Wer ein SQL-Datenbankverwaltungssystem entwirft, tut gut daran, das Fremdschlüsselsystem zu kennen und zu implementieren. Langfristig wird er davon profitieren.
Ein Fremdschlüssel ist eine Spalte (oder mehrere Spalten) in einer Datenbank, die mit der Spalte Primärschlüssel in einer anderen Tabelle verknüpft ist. Der Primärschlüssel ist eine einfache Kennung. Die nützlichen – und veränderbaren – Informationen sind in der Fremdtabelle enthalten.
Auch interessant:
MySQL Relationale Datenbanksoftware |
SQL Tutorial |
Apache Cassandra noSQL BDD |
SQL Joins |
SQL Count Tutorial |
SQL Datei öffnen |
Welchen Nutzen hat ein Fremdschlüssel SQL ?
Angenommen, du verwaltest eine Tabelle Artikel, in der es eine Spalte namens Kategorie gibt. Für jeden Artikel muss diese Kategorie einzeln ausgefüllt werden.
Als Beispiel könnten wir die Kategorie „Metallprodukt“ haben. Über Nacht ändert sich die Gesetzgebung und die Kategorie wird zu „Metallprodukt“.
Was ist zu tun? Muss ich jetzt alle Zeilen ändern, in denen die Kategorie „Metallprodukt“ vorkommt? Leider ja. Wenn die Artikeltabelle Zehntausende von Einträgen umfasst, ist das ein sehr langwieriger Prozess.
Um solche Situationen zu vermeiden, wurde der Begriff des Fremdschlüssels definiert. In dem oben beschriebenen Fall besteht die Idee darin, eine separate Tabelle mit dem Namen Kategorie zu erstellen, in der wir als Primärschlüssel eine Kennung (eine Nummer für jede Kategorie) haben, die mit der entsprechenden Beschreibung verknüpft ist.
In der Tabelle Artikel kann dann für jedes Produkt, das im Katalog angeboten wird, die entsprechende ID aus der Tabelle Kategorien angegeben werden. Es ist dann möglich, die Liste jedes Artikels auszudrucken und gleichzeitig (durch einen Join) die entsprechende Kategorie anzuzeigen.
Wie wir sehen können, ist die Situation der Kategorie, die ihren Namen ändert, hier gelöst.
Eltern- und Tochtertabelle
Eine Tabelle, die von einer anderen Tabelle referenziert wird, wird als „übergeordnete Tabelle“ bezeichnet. Dies wäre in diesem Fall die Tabelle Kategorien.
Und eine „Tochtertabelle“ ist eine Tabelle, die auf eine externe Tabelle verweist.
Ein praktisches Beispiel
Hier ist ein weiteres Beispiel für die Verwendung eines Fremdschlüssels in einem expliziteren Fall.
KUNDEN-Tabelle
Id_Client | Nachname |
Vorname |
Alter |
---|---|---|---|
1 | Martin |
Germaine |
32 |
2 |
Culprit |
Thomas |
22 |
3 |
Albanez |
Francis |
40 |
4 |
De Jonquière |
Martine |
33 |
KUNDEN ist hier die Tabelle „Verwandte“. Wenn die Kundin Nr. 4, Martine de Jonquière, sich scheiden lassen würde und morgen wieder ihren Mädchennamen (Heras) annehmen würde, würde es genügen, diese Information in der Tabelle „Verwandte“ zu ändern.
BESTELL-Tabelle
Id_Bestellung |
Date_Bestellung |
Id_Kunde |
---|---|---|
1 |
11/04/2023 |
4 |
2 |
10/05/2023 |
3 |
3 |
12/05/2023 |
4 |
4 |
26/05/2023 |
4 |
5 |
16/06/2023 |
1 |
In diesem Beispiel finden wir die Spalte „Kunden_Id“ in der Tabelle BESTELLUNGEN (die die „Tochter“-Tabelle ist). Sie zeigt auf die Spalte „Kunden_Id“ in der Tabelle KUNDEN. So könnten wir hier durch einen Join herausfinden, dass Martine de Jonquières dreimal bestellt hat: einmal im April und zweimal im Juni.
In der Tabelle KUNDEN ist die Spalte KUNDEN_ID der Primärschlüssel.
In der Tabelle BESTELLUNGEN ist die Spalte KUNDEN_ID der Fremdschlüssel.
Vorteile von Fremdschlüsseln
Referentielle Integrität
Der Hauptvorteil, der mit der Verwendung von Fremdschlüsseln verbunden ist, ist die referentielle Integrität: Keine Zeile in der Tochtertabelle ist vollständig und gültig, solange es keinen entsprechenden Datensatz in der Elterntabelle gibt.
Kohärenz der Informationen
Alle Tabellen, die auf den Fremdschlüssel verweisen, stellen sicher, dass sie konsistente und aktuelle Daten ausgeben können. Zur Erinnerung: Wenn Martine de Jonquières ihren Namen ändert, wird diese Änderung von allen Tabellen aus sichtbar, die auf ihren Identifikator verweisen.
Nachteile von Fremdschlüsseln
Verringerte Verarbeitungsgeschwindigkeit
Es ist offensichtlich, dass der Fremdschlüssel eine längere Computerverarbeitungszeit erfordert. Jedes Mal, wenn du eine neue Zeile in eine Tabelle wie BESTELLUNGEN einfügst, musst du überprüfen, ob die entsprechende Kunden-ID in der Tabelle KUNDEN vorhanden ist.
Komplexität
Der Verweis auf die Kunden-ID Nr. 4 kann komplexer sein, als einfach nur den Namen Martine de Jonquières anzugeben. Daher ist das Lesen einer Datenbank wie die der BESTELLUNGEN auf den ersten Blick nicht ganz einfach.
Fremdschlüssel SQL sind dennoch zu empfehlen
Trotz der Nachteile, die die Verwendung von Fremdschlüsseln mit sich bringen kann, ist die Verwendung von Fremdschlüsseln für diejenigen, die SQL-Datenbanksysteme entwerfen, sehr zu empfehlen. Auf lange Sicht wird er davon profitieren. Einfach ausgedrückt könnte man sagen, dass es wichtig ist, Fremdschlüssel immer dann zu verwenden, wenn man es mit einem Datentyp zu tun hat, der sich im Laufe der Zeit ändern kann. Die hier behandelten Beispiele zeigen deutlich, was man damit erreichen kann. Daher ist es von entscheidender Bedeutung, Fremdschlüssel bereits beim Entwurf einer SQL-Datenbank zu definieren.