🏗️ SQL Lehrpfad 2: Joins & Design

SQL 05: Foreign Keys & Relationen (1:1 & 1:n)

Verbinde Tabellen über Fremdschlüssel und sichere die referenzielle Datenintegrität mit ON DELETE CASCADE.

💡 1. Relationale Datenmodelle & Kardinalitäten

Fremdschlüssel (Foreign Keys) verweisen auf den Primärschlüssel einer anderen Tabelle und stellen sicher, dass keine "Waisen"-Daten entstehen:

┌─────────────────────────┐ 1:1 ┌─────────────────────────┐
│ kunden │ ──────────────────── │ kunden_profile │
├─────────────────────────┤ ├─────────────────────────┤
│ PK id (INTEGER) │ │ PK id (INTEGER) │
│ name (TEXT) │ │ FK kunde_id (UNIQUE) │──┐ (Zeigt auf kunden.id)
│ email (TEXT) │ │ lieferadresse (TEXT)│ │
└─────────────────────────┘ └─────────────────────────┘ │
│ 1 │
│ │
│ 1:n │
▼ │
┌─────────────────────────┐ │
│ bestellungen │ │
├─────────────────────────┤ │
│ PK id (INTEGER) │ │
│ FK kunde_id (INTEGER) │ ◄─────────────────────────────────────────────────┘
│ gesamtbetrag (REAL) │
│ status (TEXT) │
└─────────────────────────┘

🔗 2. Fremdschlüssel-Syntax & ON DELETE CASCADE

In SQLite muss die Fremdschlüsselprüfung explizit pro Verbindung eingeschaltet werden:

PRAGMA foreign_keys = ON;

CREATE TABLE bestellungen (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    kunde_id INTEGER NOT NULL,
    gesamtbetrag REAL NOT NULL CHECK (gesamtbetrag >= 0.0),
    status TEXT NOT NULL DEFAULT 'offen',
    -- Fremdschlüssel-Definition mit Kaskadierung:
    FOREIGN KEY (kunde_id) REFERENCES kunden(id) ON DELETE CASCADE
);
🗑️ Der Domino-Effekt von ON DELETE CASCADE

Wird ein Datensatz in der Elterntabelle gelöscht (DELETE FROM kunden WHERE id = 1;), löscht das RDBMS wie bei einem Domino-Effekt automatisch alle zugehörigen Profil- und Bestelldatensätze mit. Das verhindert verwaiste Datensätze in deiner Datenbank!

📑 3. Cheat-Sheet: Beziehungsarten & Aktionen

Beziehung Realisierung in SQL Bedeutung
1:1 (Eins-zu-Eins) kunde_id INTEGER UNIQUE REFERENCES ... Jeder Kunde hat höchstens ein Profil
1:n (Eins-zu-Viele) kunde_id INTEGER REFERENCES ... Ein Kunde kann beliebig viele Bestellungen besitzen
ON DELETE CASCADE FOREIGN KEY (...) REFERENCES ... ON DELETE CASCADE Automatisches Mitlöschen abhängiger Kind-Zeilen
ON DELETE RESTRICT FOREIGN KEY (...) REFERENCES ... ON DELETE RESTRICT Verhindert das Löschen des Eltern-Eintrags

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.

🎯 Aufgaben & Checkliste in aufgabe.sql

💻 In Web-IDE öffnen → ← Zurück zu SQL 04 Weiter zu SQL 06 →