Relationales Datenmodell
Mithilfe von Relationalen Datenmodellen kann man relationale Datenbanken planen:
Realität -> Anforderungsermittlung -> Entity-Relationship-Modell -> Relationales Datenmodell -> Datenbanksystem
Um ein relationales Datenmodell zu erstellen, muss erst ein Entity-Relationship-Modell vorliegen. Das Entity-Relationship-Modell kann mithilfe von technischen Schritten in ein relationales Datenmodell übersetzt werden.
Erklärvideos
- Relationales Datenmodell - Was ist das?
- aus einem Entity-Relationship-Modell ein relationales Datenmodell erstellen
- Mit MySQL-Workbench und XAMPP aus dem ER-Modell eine "echte" Datenbank erzeugen
Fachbegriffe
Primärschlüssel, Primärschlüssel kombiniert aus zwei Fremdschlüsseln, Fremdschlüssel, Attribut, Tabelle, 1:n-Beziehung, n:m-Beziehung
Das Zentralabitur verwendet folgende Fachbegriffe, die hier kurz übersetzt werden:
- Datenbankschema = das ganze relationale Datenmodell
- Relationenschema = eine Zeile im relationalen Datenmodell,
z.B.kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
Hier wird das "Tabelle" genannt, weil es in der Datenbank eine Tabelle wird.
Erläuterung der Begriffe
- Primärschlüssel: Der Primärschlüssel (Primary Key; abgekürzt: PK) ist ein Attribut (oder eine Kombination aus 2 Attributen), das einen Datensatz (d.h. eine Zeile in einer Datenbank-Tabelle) eindeutig identifiziert.
- Primärschlüssel werden unterstrichen, z.B. id
- Fremdschlüssel: Der Fremdschlüssel (Foreign Key; abgekürzt: FK) stellt die Verbindung zwischen Tabellen her: Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen Tabelle.
- Fremdschlüssel werden durch einen Pfeil nach oben (↑) markiert, z.B.: ↑kunde_id
Vom ER-Modell zum relationalen Datenmodell
Der Weg vom ER-Modell zum relationalen Datenmodell wird beispielhaft am ER-Modell Kurssystem (s. rechts) dargestellt.
Primärschlüssel festlegen
Für die Entitätsmengen schueler, kurs und lehrer müssen Primärschlüssel festgelegt werden:
- Keine der drei Tabellen hat ein Attribut, das einen Datensatz eindeutig identifiziert.
- Deswegen erhält jede Entitätsmenge ein neues Attribut id als Primärschlüssel.
Zwischenergebnis:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- kurs(id, name, kuerzel, halbjahr)
- lehrer(id, name, vorname, kuerzel)
Man sieht, dass die Beziehungen zwischen den Entitätsmengen noch nicht in das relationale Datenmodell übersetzt wurden; dementsprechend fehlt auch das Attribut note.
1:n-Beziehungen übertragen
1:n-Beziehungen werden in das relationale Datenmodell übersetzt, indem auf der n-Seite der Beziehung ein Fremdschlüssel eingetragen wird, der auf den Primärschlüssel der anderen beteiligten Tabelle verweist.
- lehrer - kurs ist eine 1:n-Beziehung.
- kurs ist auf der n-Seite der Beziehung.
- in kurs wird als Fremdschlüssel ↑lehrer_id eingetragen.
Zwischenergebnis:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
- lehrer(id, name, vorname, kuerzel)
Jetzt kann man bei jedem einzelen Kurs sehen, welcher Lehrer ihn unterrichtet.
n:m-Beziehungen übertragen
n:m-Beziehungen werden in das relationale Datenmodell übersetzt, indem man eine Zwischentabelle einfügt: die Zwischentabelle enthält zwei Fremdschlüssel auf die beiden Tabellen der Beziehung. Meistens kann die Kombination der beiden Fremdschlüssel als Primärschlüssel der Zwischentabelle genutzt werden.
- Eine Tabelle belegt wird eingeführt.
- sie enthält als Attribute die beiden Fremdschlüssel ↑schueler_id und ↑kurs_id - und zusätzlich das Attribut note.
- die beiden Fremdschlüssel können zusammen als Primärschlüssel genutzt werden, denn jeder Schüler kann jeden Kurs nur einmal belegen.
Man erhält also:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- belegt(↑schueler_id, ↑kurs_id, note)
- kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
- lehrer(id, name, vorname, kuerzel)
Endergebnis und Zusammenfassung
Endergebnis für das relationale Datenmodell:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- belegt(↑schueler_id, ↑kurs_id, note)
- kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
- lehrer(id, name, vorname, kuerzel)
Zusammenfassung:
- Jede Entitätsmenge bekommt einen Primärschlüssel
- 1:n-Beziehungen werden durch einen Fremdschlüssel auf der n-Seite der Beziehung modelliert.
- n:m-Beziehungen werden durch eine eigene Tabelle modelliert:
- die Tabelle enthält zwei Fremdschlüssel, für jede beteiligte Entitätsmenge einen.
- die Tabelle kann weitere Attribute enthalten.
Primärschlüssel für n:m-Beziehungen: Kombination aus den Fremdschlüsseln oder eigener Primärschlüssel?
Für die Übertragung von n:m-Beziehungen ins relationale Datenmodell gibt es drei Möglichkeiten für den Primärschlüssel:
- die Kombination aus den beiden Fremdschlüsseln (wie oben) (=zweiteiliger Primärschlüssel)
- einen eigenen Primärschlüssel, z.B.
id, den man in der Zwischentabelle ergänzt (=einteiliger Primärschlüssel) - die Kombination aus den beiden Fremdschlüsseln, erweitert um ein drittes Attribut (=dreiteiliger Primärschlüssel)
Prüfkriterium:
Ist die Kombination der beiden Fremdschlüssel im Sachzusammenhang eindeutig?
Beispiel 1: Schüler-nimmt_teil-Kurs
Beim Entity-Relationship-Modell Kursbelegung kann man für die n:m-Beziehung unterrichtet die Kombination der beiden beteiligten Fremdschlüssel nehmen.
Denn jeder Schüler kann jeden Kurs nur einmal belegen.
Damit ist die Kombination aus den beiden Fremdschlüsseln sogar inhaltlich sinnvoll, denn so wird verhindert, dass ein Schüler denselben Kurs mehrfach belegt.
Beispiel 2: Kunde-leiht-Mietwagen
Für die Beziehung leiht ist es wichtig, dass Kunde A den Mietwagen B mehrfach leihen kann! (Z.B. sein Lieblingsauto)
Das heißt, folgende Zwischentabelle ist nicht sinnvoll: leiht(↑kunde_id, ↑mietwagen_kennzeichen, datum_von, datum_bis)
Lösung für Beispiel 2: Kunde-leiht-Mietwagen
Man führt einen technischen Primärschlüssel (id) ein:
leiht(id, ↑kunde_id, ↑mietwagen_kennzeichen, datum_von, datum_bis)
So kann Kunde A den Mietwagen B mehrfach ausleihen.
Auch möglich ist:
leiht(↑kunde_id, ↑mietwagen_kennzeichen, datum_von, datum_bis)
Dadurch, dass datum_von jetzt auch Teil des Primärschlüssels ist, kann Kunde A den Wagen B mehrfach ausleihen, aber nur einmal pro Tag (was inhaltlich meistens sinnvoll ist).
Praxis
In der Praxis nimmt man zur Erstellung des relationalen Datenmodells ein Tool, z.B. MySQL-Workbench.
Vorteil: Man kann das fertige relationale Datenmodell sofort in die Datenbank exportieren.

