💡 1. Warum Junction Tables (Verknüpfungstabellen)?
In relationalen Datenbanken kann ein Fremdschlüssel immer nur auf genau eine Zeile zeigen. Um eine n:m Beziehung (ein Student ↔ viele Kurse / ein Kurs ↔ viele Studenten) abzubilden, teilen wir sie über eine Junction Table in zwei 1:n Beziehungen auf:
🔑 2. Zusammengesetzter Primärschlüssel & 3-Wege-Join
Der Primärschlüssel der Zwischentabelle besteht aus beiden Fremdschlüsseln (PRIMARY KEY (student_id, kurs_id)). Dadurch wird garantiert, dass sich ein Student nicht versehentlich doppelt für denselben Kurs einschreibt:
-- 3-Wege-Join zur Auflösung der n:m-Beziehung:
SELECT
s.matrikelnummer,
s.vorname || ' ' || s.nachname AS student_name,
k.kurs_code,
k.titel AS kurs_titel,
e.semester,
e.note
FROM studenten s
JOIN einschreibungen e ON s.id = e.student_id
JOIN kurse k ON e.kurs_id = k.id
ORDER BY s.nachname, k.kurs_code;
Die Tabelle studenten ist die eine Insel, die Tabelle kurse die andere. Die Junction Table einschreibungen ist die Hängebrücke dazwischen! Sie verbindet beide Welten und trägt zusätzliche Informationen wie den Zeitpunkt des Übertritts (Semester) und das Ergebnis (Note).
📑 3. Cheat-Sheet: n:m Pattern
| Element | SQL-Code | Bedeutung |
|---|---|---|
| Composite PK | PRIMARY KEY (a_id, b_id) |
Verhindert doppelte Verknüpfungen |
| FK mit Cascade | FOREIGN KEY (a_id) REFERENCES t1(id) ON DELETE CASCADE |
Löscht Verknüpfungen beim Entfernen einer Entität |
| Beziehungs-Attribute | note REAL, datum TEXT |
Zusatzdaten, die nur für das Paar (A, B) gelten |
| 3-Wege-Join | FROM a JOIN j ON a.id = j.a_id JOIN b ON j.b_id = b.id |
Löst die n:m-Verknüpfung in lesbare Daten auf |