Kardinalität
Kardinalität beschreibt, wie viele Datensätze zwischen zwei Tabellen miteinander verbunden sein können.
In Datenbanken zeigt die Kardinalität, ob eine Beziehung 1:1, 1:n oder n:m ist.
I. Was ist Kardinalität?
Die Anzahl-Regel für Beziehungen.
Stell dir vor:
- Eine Person hat einen Personalausweis → 1:1
- Eine Mutter hat mehrere Kinder → 1:n
- Viele Studenten in vielen Kursen → n:m
Das ist Kardinalität!
Kardinalität = "Wie viele?"
Tabelle A ←──?──→ Tabelle B
? = 1:1, 1:n, oder n:m
II. Die drei Arten
Es gibt genau drei Möglichkeiten.
1 zu 1 (1:1)
Jeder Datensatz hat genau einen Partner.
ASCII-Darstellung:
┌──────────┐ 1 1 ┌──────────┐
│ PERSON │────────────│ AUSWEIS │
└──────────┘ └──────────┘
Eine Person → Ein Ausweis
Ein Ausweis → Eine Person
- Person ↔ Personalausweis
- Land ↔ Hauptstadt
- Mitarbeiter ↔ Arbeitsplatz
- Kunde ↔ Kundennummer
1 zu n (1:n)
Ein Datensatz kann viele Partner haben.
ASCII-Darstellung:
┌──────────┐ 1 n ┌──────────┐
│ MUTTER │───────────│ KIND │
└──────────┘ └──────────┘
Eine Mutter → Viele Kinder
Ein Kind → Eine Mutter
- Kunde → Bestellungen (1 Kunde, viele Bestellungen)
- Lehrer → Schüler (1 Lehrer, viele Schüler)
- Kategorie → Produkte (1 Kategorie, viele Produkte)
- Autor → Bücher (1 Autor, viele Bücher)
n zu m (n:m)
Viele Datensätze können viele Partner haben.
ASCII-Darstellung:
┌──────────┐ n m ┌──────────┐
│ STUDENT │───────────│ KURS │
└──────────┘ └──────────┘
Viele Studenten → Viele Kurse
Viele Kurse → Viele Studenten
In der Datenbank wird n:m aufgelöst:
┌──────────┐ ┌────────────┐ ┌──────────┐
│ STUDENT │───┐ │ TEILNAHME │ ┌───│ KURS │
└──────────┘ 1 │ │(Zwischen- │ │ 1 └──────────┘
└──n│ tabelle) │n──┘
└────────────┘
- Studenten ↔ Kurse (Viele Studenten in vielen Kursen)
- Produkte ↔ Bestellungen (Viele Produkte in vielen Bestellungen)
- Schauspieler ↔ Filme (Viele Schauspieler in vielen Filmen)
- Autoren ↔ Bücher (Viele Autoren für viele Bücher)
III. Kardinalität in der Praxis
So erkennst und verwendest du Kardinalität.
Um die Kardinalität zu finden, frage:
Von A nach B:
"Wie viele B kann ein A haben?"
- Einer? → 1
- Viele? → n
Von B nach A:
"Wie viele A kann ein B haben?"
- Einer? → 1
- Viele? → m/n
Beispiel Kunde-Bestellung:
- "Wie viele Bestellungen kann ein Kunde haben?" → Viele (n)
- "Wie viele Kunden hat eine Bestellung?" → Einer (1)
- Ergebnis: 1:n
Szenario: Bibliothek
BUCH ↔ AUTOR
Frage 1: Wie viele Autoren kann ein Buch haben?
→ Mehrere (z.B. Co-Autoren)
Frage 2: Wie viele Bücher kann ein Autor schreiben?
→ Mehrere
Ergebnis: n:m (Zwischentabelle nötig!)
┌──────┐ ┌──────────┐ ┌──────┐
│ BUCH │──n────│ VERFASST │───n───│ AUTOR│
└──────┘ │ (Zwischen-│ └──────┘
│ tabelle) │
└────────────┘
│
(Rolle)
(z.B. Hauptautor)
IV. Kardinalität im ER-Modell
So zeichnest du Kardinalität im ER-Modell.
Crow's Foot Notation:
1 = ──│ (senkrechter Strich)
n/m = ──< (Krähenfuß)
Beispiele:
1:1 = ──│────│──
1:n = ──│────<──
n:m = ──<────<──
Min-Max Notation:
(1,1) = genau eins
(0,1) = null oder eins
(1,n) = eins oder viele
(0,n) = null oder viele
(1,*) = mindestens eins
V. Umsetzung in SQL
So setzt du Kardinalität in der Datenbank um.
1:1 Beziehung:
-- Eindeutiger Fremdschlüssel
CREATE TABLE Person (
PersonID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE Ausweis (
AusweisID INT PRIMARY KEY,
PersonID INT UNIQUE, ← UNIQUE macht es 1:1
Nummer VARCHAR(20),
FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
);
1:n Beziehung:
CREATE TABLE Kunde (
KundeID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE Bestellung (
BestellID INT PRIMARY KEY,
KundeID INT, ← Kein UNIQUE = 1:n
Datum DATE,
FOREIGN KEY (KundeID) REFERENCES Kunde(KundeID)
);
n:m Beziehung:
CREATE TABLE Student (
StudentID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE Kurs (
KursID INT PRIMARY KEY,
Titel VARCHAR(100)
);
-- Zwischentabelle für n:m
CREATE TABLE Teilnahme (
StudentID INT,
KursID INT,
Note DECIMAL(2,1),
PRIMARY KEY (StudentID, KursID), ← Kombinierter Schlüssel
FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
FOREIGN KEY (KursID) REFERENCES Kurs(KursID)
);
VI. Häufige Fehler
1. n:m nicht auflösen:
❌ FALSCH:
Student ←→ Kurs direkt verbinden
✅ RICHTIG:
Student ← Teilnahme → Kurs
(Zwischentabelle verwenden!)
2. Falsche Richtung:
❌ FALSCH:
"Ein Kind hat viele Mütter" (n:1)
✅ RICHTIG:
"Eine Mutter hat viele Kinder" (1:n)
3. UNIQUE vergessen bei 1:1:
❌ FALSCH:
PersonID INT ← Erlaubt mehrfache Einträge!
✅ RICHTIG:
PersonID INT UNIQUE ← Erzwingt 1:1
VII. Prüfungswissen
Drei Arten kennen:
- 1:1 (eins zu eins)
- 1:n (eins zu viele)
- n:m (viele zu viele)
Erkennen können:
- Fragen stellen: "Wie viele?"
- Von beiden Seiten prüfen
- n:m braucht Zwischentabelle
Zeichnen können:
- Im ER-Diagramm darstellen
- Mit Crow's Foot Notation
- Korrekte Richtung beachten
Frage: "Bestimmen Sie die Kardinalität zwischen den Entitäten Arzt und Patient. Ein Arzt behandelt viele Patienten, ein Patient kann von mehreren Ärzten behandelt werden."
Antwort:
Die Kardinalität ist n:m (viele zu viele).
Begründung:
- Ein Arzt kann viele Patienten behandeln (1:n von Arzt aus)
- Ein Patient kann von vielen Ärzten behandelt werden (1:n von Patient aus)
- Beides zusammen ergibt n:m
Umsetzung:
┌──────┐ ┌────────────┐ ┌─────────┐
│ ARZT │───n───│ BEHANDLUNG │───n───│ PATIENT │
└──────┘ │(Zwischen- │ └─────────┘
│ tabelle) │
└────────────┘
│
(Datum)
(Diagnose)
VIII. Zusammenfassung
Kardinalität beschreibt:
- Wie viele Datensätze verbunden sein können
- Drei Arten: 1:1, 1:n, n:m
- Wichtig für Datenbank-Design
Merkregel:
1:1 → Eindeutig beidseitig
1:n → Einer hat viele
n:m → Viele haben viele → Zwischentabelle!
Siehe auch: