Relationales Datenmodell
Vom Szenario zum Tabellenschema – Top-4-Thema in den letzten Prüfungen.
Lernziele
- Aus einem ER-Modell ein relationales Schema ableiten
- Primär- und Fremdschlüssel korrekt kennzeichnen
- 1:1-, 1:n- und n:m-Beziehungen in Tabellen umsetzen
- Konventionen der AP2-Schreibweise einhalten
Kernbegriffe
- Relation
- Tabelle mit fester Spaltenmenge und Zeilen als Datensätzen.
- Primärschlüssel (PK)
- Minimale Spalte(n)-Kombination, die jeden Datensatz eindeutig identifiziert.
- Fremdschlüssel (FK)
- Spalte, die auf einen PK einer anderen Tabelle verweist.
- Referentielle Integrität
- Jede FK-Verweis muss existieren oder NULL sein.
1. Notation
In der AP2 wird das Schema meist textuell notiert:
kunde (id, name, stadt)
↑
Primärschlüssel wird unterstrichen (oder fett/PK markiert)Für Fremdschlüssel wird die Spalte zusätzlich gekennzeichnet, z. B. mit einem Pfeil auf die referenzierte Tabelle:
bestellung (id, kunde_id, datum)
↑
FK → kunde(id)2. Überführung der Beziehungstypen
1:1
Einfachster Fall. FK kann auf einer der beiden Seiten liegen. Meist auf der Seite, die optional ist oder häufiger null sein darf.
mitarbeiter (id, name, parkplatz_id)
parkplatz (id, nummer)
-- Oder umgekehrt: parkplatz bekommt mitarbeiter_id1:n
FK wird immer auf der »n«-Seite eingefügt.
kunde (id, name)
bestellung (id, kunde_id, datum)
↑
FK → kunde(id)n:m
Immer eine Zwischentabelle. Der PK der Zwischentabelle ist typischerweise die Kombination der beiden FKs (oder eine eigene ID + UNIQUE(FK1, FK2)).
student (id, name)
kurs (id, titel)
belegt (student_id, kurs_id, note) PK = (student_id, kurs_id)
↑ ↑
FK → student FK → kurs3. Integritätsregeln
- Entitätsintegrität: Kein Teil des Primärschlüssels darf NULL sein.
- Referentielle Integrität: Jeder FK-Wert muss in der referenzierten Tabelle vorhanden sein – oder NULL sein, wenn zulässig.
- Domänenintegrität: Wertebereich einer Spalte wird durch Datentyp und CHECK-Constraints eingehalten.
4. Typische Constraints im DDL
CREATE TABLE bestellung (
id INT PRIMARY KEY,
kunde_id INT NOT NULL,
datum DATE NOT NULL,
status VARCHAR(20) CHECK (status IN ('offen','bezahlt','storniert')),
CONSTRAINT fk_kunde FOREIGN KEY (kunde_id) REFERENCES kunde(id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);5. Beispiel: Vom ERM zum Schema
Gegeben:
- Ein Kunde kann 0..n Bestellungen haben.
- Jede Bestellung enthält mindestens 1 Artikel, jeder Artikel kann in vielen Bestellungen auftauchen.
- Je Artikel in einer Bestellung wird eine Menge festgehalten.
Lösung:
kunde (id, name, stadt)
artikel (id, bezeichnung, preis)
bestellung (id, kunde_id → kunde, datum)
bestellposition (bestellung_id → bestellung,
artikel_id → artikel,
menge) PK = (bestellung_id, artikel_id)Übungen
Eine AntwortEine n:m-Beziehung zwischen Student und Kurs soll in ein relationales Schema überführt werden. Was ist richtig?
Eine AntwortWas bedeutet »referentielle Integrität«?
SQL-ÜbungLege per CREATE TABLE eine Tabelle `bestellung` (id PK, kunde_id FK → kunde(id), datum NOT NULL) an.