Beziehungen verstehen
Du hast gelernt, wie du Entities erkennst und Attribute definierst. Aber Entities existieren nicht isoliert – sie stehen miteinander in Beziehung. Ein Kunde bestellt Bücher. Ein Autor schreibt Bücher. In diesem Artikel lernst du, wie du Beziehungen zwischen Entities erkennst und modellierst.
Was ist eine Beziehung?
Eine Beziehung (englisch: Relationship) beschreibt, wie zwei Entities miteinander verbunden sind.
Beziehungen beantworten Fragen wie:
- Welcher Kunde hat welche Bestellung aufgegeben?
- Welches Buch wurde von welchem Autor geschrieben?
- Welches Mitglied hat welches Buch ausgeliehen?
Wie erkenne ich Beziehungen?
Beziehungen verstecken sich oft in Verben deiner Problemstellung:
Beispiel: Online-Buchladen
"Ein Kunde bestellt Bücher. Ein Autor schreibt Bücher. Ein Buch gehört zu einem Genre."
Die Verben zeigen die Beziehungen:
- Kunde bestellt Buch → Beziehung zwischen Kunde und Buch
- Autor schreibt Buch → Beziehung zwischen Autor und Buch
- Buch gehört zu Genre → Beziehung zwischen Buch und Genre
Die drei Arten von Beziehungen
Es gibt drei grundlegende Beziehungstypen. Sie unterscheiden sich darin, wie viele Datensätze auf beiden Seiten beteiligt sein können.
1:1 Beziehung (Eins-zu-Eins)
Ein Datensatz der Entity A gehört zu genau einem Datensatz der Entity B – und umgekehrt.
Beispiel: Person und Reisepass
- Eine Person hat genau einen Reisepass
- Ein Reisepass gehört zu genau einer Person
Das ist eine 1:1 Beziehung.
Weitere Beispiele
- Land ↔ Hauptstadt
- Mitarbeiter ↔ Mitarbeiter-Ausweis
- Benutzer ↔ Profil
1:n Beziehung (Eins-zu-Viele)
Ein Datensatz der Entity A kann zu vielen Datensätzen der Entity B gehören. Aber ein Datensatz von B gehört nur zu einem Datensatz von A.
Beispiel: Kunde und Bestellung
- Ein Kunde kann viele Bestellungen haben
- Eine Bestellung gehört zu genau einem Kunden
Das ist eine 1:n Beziehung (gelesen: Eins-zu-n, wobei n für "viele" steht).
Visualisierung
Kunde 1 → Bestellung 1, Bestellung 2, Bestellung 3
Kunde 2 → Bestellung 4, Bestellung 5
Ein Kunde hat mehrere Bestellungen, aber jede Bestellung gehört nur zu einem Kunden.
Weitere Beispiele
- Autor → Bücher (ein Autor schreibt viele Bücher)
- Kategorie → Produkte (eine Kategorie enthält viele Produkte)
- Lehrer → Schüler (ein Lehrer unterrichtet viele Schüler)
- Ordner → Dateien (ein Ordner enthält viele Dateien)
n:m Beziehung (Viele-zu-Viele)
Ein Datensatz der Entity A kann zu vielen Datensätzen der Entity B gehören – und umgekehrt.
Beispiel: Student und Kurs
- Ein Student belegt viele Kurse
- Ein Kurs wird von vielen Studenten belegt
Das ist eine n:m Beziehung (gelesen: n-zu-m oder Viele-zu-Viele).
Visualisierung
Student 1 → Kurs A, Kurs B, Kurs C
Student 2 → Kurs A, Kurs D
Kurs A → Student 1, Student 2, Student 3
Beide Seiten können mehrere Verbindungen haben.
Weitere Beispiele
- Buch ↔ Autor (ein Buch kann mehrere Autoren haben, ein Autor kann mehrere Bücher schreiben)
- Produkt ↔ Bestellung (eine Bestellung enthält mehrere Produkte, ein Produkt kann in vielen Bestellungen sein)
- Schauspieler ↔ Film (ein Schauspieler spielt in vielen Filmen, ein Film hat viele Schauspieler)
- Hashtag ↔ Beitrag (ein Beitrag hat mehrere Hashtags, ein Hashtag wird in vielen Beiträgen verwendet)
Wie modelliert man n:m Beziehungen?
n:m Beziehungen können nicht direkt in einer relationalen Datenbank abgebildet werden. Du brauchst eine Zwischentabelle (auch Verbindungstabelle oder Junction Table genannt).
Beispiel: Bücher und Autoren
Ohne Zwischentabelle würdest du das Problem haben:
- Wo speicherst du bei einem Buch mehrere Autoren?
- In einem Textfeld "Autor1, Autor2, Autor3"? (Schlecht!)
Lösung: Zwischentabelle
Du erstellst drei Tabellen:
Tabelle 1: Bücher
Tabelle 2: Autoren
Tabelle 3: Buch_Autor (Zwischentabelle)
Die Zwischentabelle speichert nur IDs. Sie sagt:
- Buch 1 (Design Patterns) wurde von Autor 1 (Erich Gamma) geschrieben
- Buch 1 (Design Patterns) wurde von Autor 2 (Richard Helm) geschrieben
- Buch 2 (Clean Code) wurde von Autor 3 (Robert C. Martin) geschrieben
Beziehungen im Bibliotheks-Beispiel
Schauen wir uns unser Bibliotheks-Beispiel an und identifizieren alle Beziehungen:
1. Autor → Buch (1:n)
- Ein Autor schreibt viele Bücher
- Ein Buch hat einen Autor (vereinfacht)
Umsetzung: BuchID in der Bücher-Tabelle als Fremdschlüssel zu AutorID
2. Genre → Buch (1:n)
- Ein Genre umfasst viele Bücher
- Ein Buch gehört zu einem Genre
Umsetzung: GenreID in der Bücher-Tabelle als Fremdschlüssel
3. Mitglied ↔ Buch über Ausleihe (n:m)
- Ein Mitglied kann viele Bücher ausleihen (über Zeit)
- Ein Buch kann von vielen Mitgliedern ausgeliehen werden (über Zeit)
Umsetzung: Die Tabelle Ausleihe ist die Zwischentabelle mit MitgliedsID und BuchID als Fremdschlüssel
Praktisches Beispiel: E-Commerce
Analysieren wir die Beziehungen in einem Online-Shop:
Entities
- Kunde
- Bestellung
- Produkt
- Kategorie
Beziehung 1: Kunde → Bestellung (1:n)
- Ein Kunde kann viele Bestellungen aufgeben
- Eine Bestellung gehört zu genau einem Kunden
Typ: 1:n
Beziehung 2: Kategorie → Produkt (1:n)
- Eine Kategorie enthält viele Produkte
- Ein Produkt gehört zu einer Kategorie
Typ: 1:n
Beziehung 3: Bestellung ↔ Produkt (n:m)
- Eine Bestellung enthält viele Produkte
- Ein Produkt kann in vielen Bestellungen vorkommen
Typ: n:m
Lösung: Zwischentabelle Bestellpositionen
Diese Tabelle enthält:
- BestellungID (Fremdschlüssel)
- ProduktID (Fremdschlüssel)
- Menge (wie viele Stück?)
- Einzelpreis (Preis zum Zeitpunkt der Bestellung)
Übung: Schule
Identifiziere die Beziehungen und ihre Typen:
Entities:
- Schüler
- Lehrer
- Kurs
- Raum
Fragen:
- Welche Beziehung besteht zwischen Schüler und Kurs?
- Welche Beziehung besteht zwischen Lehrer und Kurs?
- Welche Beziehung besteht zwischen Kurs und Raum?
Überlege selbst, bevor du weiterliest.
Lösung
1. Schüler ↔ Kurs: n:m
- Ein Schüler belegt viele Kurse
- Ein Kurs wird von vielen Schülern besucht
- Lösung: Zwischentabelle "Teilnahme" oder "Einschreibung"
2. Lehrer → Kurs: 1:n
- Ein Lehrer unterrichtet viele Kurse
- Ein Kurs wird von einem Lehrer unterrichtet (vereinfacht)
- Lösung: LehrerID als Fremdschlüssel in der Kurs-Tabelle
3. Kurs → Raum: 1:n (oder n:m)
- Option 1 (vereinfacht): Ein Kurs findet in einem festen Raum statt → 1:n (Raum → Kurs)
- Option 2 (realistisch): Ein Kurs kann in verschiedenen Räumen stattfinden, ein Raum wird von verschiedenen Kursen genutzt → n:m mit Zwischentabelle "Stundenplan"
Beziehungstypen bestimmen
So entscheidest du, welcher Beziehungstyp vorliegt:
Methode: Frage in beide Richtungen
Stelle dir für beide Entities die Frage: "Wie viele können zugeordnet sein?"
Beispiel: Kunde und Bestellung
- Frage 1: Wie viele Bestellungen kann ein Kunde haben? → Viele
- Frage 2: Wie viele Kunden kann eine Bestellung haben? → Einen
Antwort: Viele zu Einen = 1:n
Zusammenfassung
Beziehungen verbinden Entities miteinander:
- Beziehungen beschreiben, wie Entities zusammenhängen
- Erkenne Beziehungen durch Verben in der Problemstellung
- 1:1 - Einer zu Einer (selten)
- 1:n - Einer zu Viele (am häufigsten)
- n:m - Viele zu Viele (benötigt Zwischentabelle)
- n:m Beziehungen werden mit Zwischentabellen umgesetzt
- Frage in beide Richtungen: "Wie viele können zugeordnet sein?"
Im nächsten Artikel lernst du, wie du all das visuell darstellst: mit ER-Diagrammen (Entity-Relationship-Diagrammen).