Relationales Datenmodell

Aus SibiWiki
Version vom 22. Juni 2026, 20:39 Uhr von Akaibel (Diskussion | Beiträge) (→‎Fachbegriffe)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


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

  1. Relationales Datenmodell - Was ist das?
  2. aus einem Entity-Relationship-Modell ein relationales Datenmodell erstellen
  3. 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

ER-Modell Kurssystem

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

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.