0Pricing
SQL Academy · Lektion

FOREIGN KEY und referenzielle Aktionen

Verknüpfen Sie Tabellen mit FOREIGN KEY und wählen Sie für das gewünschte Verhalten ON DELETE CASCADE / SET NULL / RESTRICT.

FOREIGN KEY und referenzielle Aktionen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ein Fremdschlüssel bewirkt

Ein FOREIGN KEY sorgt dafür, dass die Datenbank Zeilen ablehnt, die auf nicht vorhandene übergeordnete Datensätze verweisen:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL REFERENCES users(id),
  total NUMERIC(10,2) NOT NULL
);

-- Inserting an order with user_id=999 fails if no such user exists.

Warum Fremdschlüssel verwenden?

Fremdschlüssel erzwingen die referenzielle Integrität:

  • Keine verwaisten Zeilen
  • Erkennen von Fehlern in der Anwendung bereits beim Einfügen
  • ER-Diagramme bleiben korrekt
  • Ermöglichen automatisches Kaskadenverhalten

Referenzielle Aktionen

Was soll geschehen, wenn die übergeordnete Zeile gelöscht oder aktualisiert wird? Fünf Optionen:

  • NO ACTION – Fehler (Standard, aufschiebbar)
  • RESTRICT – Fehler (nicht aufschiebbar)
  • CASCADE – untergeordnete Zeile ebenfalls löschen/aktualisieren
  • SET NULL – den Fremdschlüssel der untergeordneten Zeile auf NULL setzen
  • SET DEFAULT – den Fremdschlüssel der untergeordneten Zeile auf den Standardwert setzen

ON DELETE CASCADE

„Wenn der Benutzer gelöscht wird, löschen Sie auch seine Bestellungen“:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL
    REFERENCES users(id) ON DELETE CASCADE,
  total NUMERIC(10,2) NOT NULL
);

ON DELETE SET NULL

„Wenn die Führungskraft entfernt wird, bleiben die Mitarbeitenden bestehen, verlieren aber ihre Führungskraft“:

CREATE TABLE employees (
  id BIGSERIAL PRIMARY KEY,
  full_name TEXT NOT NULL,
  manager_id BIGINT REFERENCES employees(id) ON DELETE SET NULL
);

Standard: RESTRICT-ähnliches Verhalten

Ohne eine referenzielle Aktion schlägt der Versuch fehl, eine übergeordnete Zeile mit untergeordneten Zeilen zu löschen:

ERROR:  update or delete on table "users" violates foreign key constraint "orders_user_id_fkey" on table "orders"
DETAIL:  Key (id)=(42) is still referenced from table "orders".

Indizieren Sie die Fremdschlüsselspalte immer

PostgreSQL erstellt auf der Seite der untergeordneten Tabelle NICHT automatisch einen Index. Fügen Sie einen hinzu – andernfalls löst das Löschen einer übergeordneten Zeile einen vollständigen Scan jeder untergeordneten Tabelle aus:

CREATE INDEX orders_user_id_idx ON orders(user_id);

Zusammengesetzte Fremdschlüssel

Verweisen Sie auf einen zusammengesetzten Primärschlüssel:

CREATE TABLE order_items (
  order_id BIGINT,
  line_no INT,
  PRIMARY KEY (order_id, line_no)
);
CREATE TABLE shipments (
  order_id BIGINT,
  line_no INT,
  FOREIGN KEY (order_id, line_no)
    REFERENCES order_items(order_id, line_no)
);

Fremdschlüsselprüfungen aufschieben

Manchmal müssen Sie ein Henne-Ei-Paar einfügen. Markieren Sie den Fremdschlüssel als DEFERRABLE INITIALLY DEFERRED:

ALTER TABLE orders
  ALTER CONSTRAINT orders_user_id_fkey DEFERRABLE INITIALLY DEFERRED;

BEGIN;
  INSERT INTO orders ... ;     -- FK temporarily not checked
  INSERT INTO users ... ;
COMMIT;                         -- checked here

Fremdschlüssel im laufenden Betrieb hinzufügen

Verwenden Sie bei großen Tabellen NOT VALID + VALIDATE, um eine lange Sperre zu vermeiden:

ALTER TABLE orders
  ADD CONSTRAINT orders_user_id_fkey
  FOREIGN KEY (user_id) REFERENCES users(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT orders_user_id_fkey;

Kaskaden mit Bedacht einsetzen

CASCADE löscht abhängige Daten weiter. Das Löschen eines Benutzers kann Bestellungen, Zahlungen und Prüfprotokolle entfernen. Stellen Sie sicher, dass die Kaskade Ihrer fachlichen Absicht entspricht.

Zusammenfassung

Fremdschlüssel sind Leitplanken.

  • REFERENCES + Aktion deklarieren die Verknüpfung und ihr Verhalten
  • Indizieren Sie die Fremdschlüsselspalte in der untergeordneten Tabelle
  • Verwenden Sie NOT VALID + VALIDATE für das Hinzufügen im laufenden Betrieb

Kurzer Test

Welche referenzielle Aktion entfernt eine Bestellung AUTOMATISCH, wenn ihr übergeordneter Benutzer gelöscht wird?

Häufig gestellte Fragen

Ist die Lektion „FOREIGN KEY und referenzielle Aktionen“ kostenlos?

Ja — der vollständige Text von „FOREIGN KEY und referenzielle Aktionen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „FOREIGN KEY und referenzielle Aktionen“?

Verknüpfen Sie Tabellen mit FOREIGN KEY und wählen Sie für das gewünschte Verhalten ON DELETE CASCADE / SET NULL / RESTRICT. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „FOREIGN KEY und referenzielle Aktionen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. NOT-NULL- und CHECK-Constraints
  2. UNIQUE-Constraints und zusammengesetzte Schlüssel
  3. FOREIGN KEY und referenzielle Aktionen
  4. DEFAULT-Werte und generierte Spalten
← Zurück zu SQL Academy