💡 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) │
└─────────────────────────┘
│ 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.