| .. | ||
| aufgabe.sql | ||
| index.html | ||
| musterloesung.sql | ||
| README.md | ||
| test_aufgabe.sql | ||
SQL 05: Foreign Keys & Relationen (1:1 und 1:n) 🔗
Willkommen zu Modul 05 und Lehrpfad 2: Relationale Joins & Datenbank-Design!
Das "R" in RDBMS steht für Relational. Tabellen stehen nicht isoliert für sich, sondern sind über logische Beziehungen (Fremdschlüssel / Foreign Keys) miteinander verknüpft.
💡 1. Das Wichtigste in Kürze
1. Fremdschlüssel-Prüfung aktivieren in SQLite
In SQLite ist die Prüfung von Fremdschlüsseln aus historischen Gründen standardmäßig deaktiviert. Aktiviere sie immer zu Beginn:
PRAGMA foreign_keys = ON;
2. 1:1 Beziehung (Ein Kunde hat genau ein Detailprofil)
Eine 1:1 Beziehung entsteht, indem der Fremdschlüssel zusätzlich als UNIQUE deklariert wird:
CREATE TABLE kunden_profile (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kunde_id INTEGER NOT NULL UNIQUE,
telefon TEXT,
lieferadresse TEXT NOT NULL,
FOREIGN KEY (kunde_id) REFERENCES kunden(id) ON DELETE CASCADE
);
3. 1:n Beziehung (Ein Kunde hat viele Bestellungen)
Ein Kunde kann 0, 1 oder 100 Bestellungen aufgeben. Jede Bestellung gehört aber zu genau einem Kunden:
CREATE TABLE bestellungen (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kunde_id INTEGER NOT NULL,
bestelldatum TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
gesamtbetrag REAL NOT NULL CHECK (gesamtbetrag >= 0.0),
status TEXT NOT NULL DEFAULT 'offen' CHECK (status IN ('offen', 'bezahlt', 'versendet', 'storniert')),
FOREIGN KEY (kunde_id) REFERENCES kunden(id) ON DELETE CASCADE
);
4. Kaskadierendes Löschen (ON DELETE CASCADE)
Wenn ein Datensatz in der Elterntabelle (kunden) gelöscht wird:
ON DELETE CASCADE: Alle verknüpften Kinder (Profile, Bestellungen) werden automatisch mitgelöscht.ON DELETE RESTRICT: Das Löschen des Kunden wird mit einem Fehler blockiert, solange noch Bestellungen existieren.ON DELETE SET NULL: Der Fremdschlüsselkunde_idim Kind wird aufNULLgesetzt.
🎯 Aufgaben in aufgabe.sql
- TODO 1:
PRAGMA foreign_keys = ON;setzen und Elterntabellekundenanlegen. - TODO 2: 1:1 Tabelle
kunden_profilemitUNIQUEaufkunde_idundON DELETE CASCADEerstellen. - TODO 3: 1:n Tabelle
bestellungenmitFOREIGN KEYundON DELETE CASCADEerstellen. - TODO 4: 3 Kunden, 3 Profile und 5 Bestellungen einfügen.
- TODO 5: Den Kunden mit
id = 1löschen (DELETE FROM kunden WHERE id = 1;). - TODO 6: Verifizieren, dass Profil und Bestellungen von Kunde 1 automatisch kaskadierend mitgelöscht wurden.
🚀 Ausführung
Klicke in der Web-IDE auf Code ausführen oder Tests ausführen, um die referenzielle Integrität deiner Tabellen zu testen.