πŸ—οΈ 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

🎯 Aufgaben & Checkliste in aufgabe.sql

πŸ’» In Web-IDE ΓΆffnen → ← ZurΓΌck zu SQL 04 Weiter zu SQL 06 →