Loading
Homepage
  • karstenkarsten
  • Date:  15. September 2025
  • Development

Die Sache mit den Foreign Keys!

Was sind Foreign Keys?

Ein Foreign Key ist ein Verweis von einer Tabelle (Kindtabelle) auf einen Primärschlüssel in einer anderen Tabelle (Elterntabelle). Damit stellt die Datenbank sicher, dass in der Kindtabelle nur Werte existieren, die auch tatsächlich in der Elterntabelle vorhanden sind.

Beispiel:

  • Tabelle kunden mit kunde_id (Primärschlüssel).
  • Tabelle bestellungen mit kunde_id als Fremdschlüssel.

So wird verhindert, dass eine Bestellung einem nicht existierenden Kunden zugeordnet wird.

Kaskadiertes Löschen – was bedeutet das?

Normalerweise darf man einen Datensatz in der Elterntabelle nicht löschen, wenn noch abhängige Einträge in der Kindtabelle existieren. Das verhindert sogenannte „verwaiste“ Datensätze.

Mit ON DELETE CASCADE ändert sich das Verhalten:
Wird ein Kunde gelöscht, entfernt MySQL automatisch alle Bestellungen, die diesem Kunden zugeordnet sind.

Das passiert atomar innerhalb derselben Transaktion – konsistent, sicher und ohne dass man zusätzliche Lösch-Queries schreiben muss.

Vorteile im Überblick

1. Automatische Datenintegrität

Ohne Foreign Keys muss man selbst darauf achten, dass abhängige Daten gelöscht oder angepasst werden. Mit kaskadiertem Löschen übernimmt die Datenbank diese Aufgabe. Das reduziert Fehlerquellen und sorgt dafür, dass es keine „toten“ Datensätze gibt.

2. Weniger Code, weniger Logik in der Anwendung

Statt in der Applikation aufwendig Löschroutinen zu implementieren (z. B. erst Bestellungen, dann Rechnungen, dann den Kunden), reicht ein einziges DELETE in der Elterntabelle. MySQL erledigt den Rest. Das spart Entwicklungszeit und macht den Code schlanker.

3. Performancevorteile

Da die Löschvorgänge direkt innerhalb der Datenbank-Engine ablaufen, sind sie in der Regel schneller als eine manuelle Umsetzung über mehrere Abfragen in der Anwendung. MySQL optimiert intern den Ablauf, sodass große Datenmengen effizient gelöscht werden können.

4. Konsistenz über mehrere Ebenen

Gerade in komplexeren Strukturen mit mehreren abhängigen Tabellen sorgt ON DELETE CASCADE dafür, dass die gesamte Kette berücksichtigt wird. Löscht man z. B. einen Kunden, verschwinden automatisch Bestellungen, Bestellpositionen und ggf. Rechnungsdaten – ohne manuelles Nachjustieren.

5. Einfache Wartung und geringere Fehleranfälligkeit

Je mehr Logik man in die Anwendung auslagert, desto größer das Risiko für Inkonsistenzen. Mit Foreign Keys bleibt die Logik dort, wo sie hingehört: in der Datenbank. Das erleichtert die Wartung und schützt vor versehentlichen Datenleichen.

Wann sollte man aufpassen?

Bewusster Einsatz: Es ist ratsam, genau zu definieren, welche Beziehungen ein automatisches Löschen erlauben und wo man eher ON DELETE SET NULL oder gar keine Automatik nutzt.

Nicht überall sinnvoll: In Systemen, bei denen Historien zwingend erhalten bleiben müssen (z. B. rechtliche Aufbewahrungspflichten bei Rechnungen), kann ein kaskadierendes Löschen problematisch sein.

Große Löschvorgänge: Werden viele abhängige Datensätze gleichzeitig gelöscht, kann das Performance und Locks beeinflussen. Hier sollte man Testläufe einplanen.

Du brauchst Hilfe bei deiner WordPress Page oder Softwareentwicklung?

Nimm Kontakt zu mir auf!

Posted in Development
Previous
All posts
Next