ER-Modell in Relationales Modell umwandeln: Ein Anfängerleitfaden

Hallo da draußen, zukünftige Datenbank-Zauberer! Heute machen wir uns auf eine aufregende Reise vom Reich der Entitäts-Beziehungs-(ER-)Modelle hin zur Welt der Relationellen Modelle. Keine Sorge, wenn du dich ein bisschen verloren fühlst – wir gehen das Schritt für Schritt durch, und am Ende wirst du ER-Diagramme in relationale Schemata wie ein Profi umwandeln können!

DBMS - ER to Relational Model

Warum ER in Relational umwandeln?

Bevor wir eintauchen, lassen Sie uns darüber sprechen, warum wir das tun. Stell dir vor, du baust ein Haus. Das ER-Modell ist wie dein Bauplan – es zeigt dir das große Ganze. Aber um das Haus tatsächlich zu bauen, brauchst du detaillierte Pläne. Das ist, wo das relationale Modell hereinkommt. Es gibt uns eine konkrete Möglichkeit, unser Datenbankdesign in realen Datenbankmanagementsystemen (DBMS) zu implementieren.

Nun, lasst uns die Ärmel hochwerren und loslegen!

Abbildung von Entitäten

Was ist eine Entität?

Eine Entität ist wie ein "Ding" in unserer Datenbankwelt. Es könnte eine Person, ein Ort oder ein Objekt sein – alles, was wir informationell speichern möchten.

Wie man eine Entität abbildet

Wenn wir eine Entität in das relationale Modell abbilden, erstellen wir eine Tabelle. Es ist so einfach! Jedes Attribut der Entität wird zu einer Spalte in der Tabelle.

Schauen wir uns ein Beispiel an:

Student
ID (PK)
Name
Alter
Fach
```

Hier haben wir die 'Student'-Entität in eine 'Student'-Tabelle abgebildet. Die 'ID' ist unser Primärschlüssel (PK), der jeden Studenten eindeutig identifiziert.

Ein Wort zu Primärschlüsseln

Stell dir vor, ein Primärschlüssel ist wie die eindeutige ID-Karte eines Studenten. Genau wie keine zwei Studenten die gleiche ID-Karte haben sollten, sollten auch keine zwei Zeilen in unserer Tabelle den gleichen Primärschlüsselwert haben.

Abbildung von Beziehungen

Beziehungen in ER-Modellen zeigen, wie Entitäten miteinander verbunden sind. In der relationalen Welt verwenden wir Fremdschlüssel, um diese Verbindungen darzustellen.

Ein-zu-Viel-Beziehung

Das ist wie ein Lehrer und seine Schüler. Ein Lehrer kann viele Schüler haben, aber jeder Schüler hat nur einen Lehrer (in diesem Kontext).

| Lehrer | | Student | |-------------| |-------------| | LehrerID(PK)| | SchülerID(PK)| | Name | | Name | | Fach | | LehrerID(FK)|


Siehst du die 'LehrerID' in der Schüler-Tabelle? Das ist unser Fremdschlüssel (FK). Er verweist auf die LehrerID in der Lehrer-Tabelle und erstellt die Beziehung.

### Viel-zu-Viel-Beziehung

Denke an Schüler und Kurse. Ein Schüler kann viele Kurse besuchen, und ein Kurs kann vielen Schülern gehören. Dafür benötigen wir eine Junction-Tabelle:


| Schüler      |   | Einschreibung  |   | Kurs          |
|-------------|   |---------------|   |--------------|
| SchülerID(PK)|   | SchülerID(FK)|   | KursID(PK)    |
| Name        |   | KursID(FK)    |   | Kursname      |
|             |   | Note          |   |              |

Die Einschreibungs-Tabelle verbindet Schüler und Kurse und ermöglicht Viel-zu-Viel-Beziehungen.

Abbildung von schwachen Entitätsmengen

Eine schwache Entität ist wie ein Sidekick – sie kann ohne ihren Helden (die starke Entität) nicht existieren. In Datenbankterminologie hat sie keinen eigenen Primärschlüssel.

Nehmen wir an, wir haben 'Raum' als schwache Entität von 'Gebäude':

| Gebäude | | Raum | |-------------| |--------------| | GebäudID(PK)| | Raumnummer | | Gebäudename | | Kapazität | | | | GebäudID(FK) |


Der Primärschlüssel für Raum wäre eine Kombination aus GebäudID und Raumnummer.

## Abbildung von hierarchischen Entitäten

Hierarchische Entitäten sind wie Familiengenerationen in unserer Datenbankwelt. Wir haben einige Möglichkeiten, diese abzubilden:

### 1. Ansatz mit einer Tabelle

Wir packen alles in eine Tabelle:


| Person       |
|-------------|
| PersonID(PK) |
| Name         |
| Typ          |
| MitarbeiterID|
| SchülerID    |

Dies funktioniert, kann aber zu vielen Nullwerten führen.

2. Ansatz mit einer Tabelle pro Typ

Wir erstellen eine Tabelle für den Basistyp und separate Tabellen für jeden Subtyp:

| Person | | Mitarbeiter | | Schüler | |-------------| |--------------| |--------------| | PersonID(PK)| | PersonID(FK) | | PersonID(FK) | | Name | | MitarbeiterID| | SchülerID | | | | Abteilung | | Fach |


Dieser Ansatz ist flexibler, erfordert aber Joins für Abfragen.

### 3. Ansatz mit einer Tabelle pro konkreten Typ

Wir erstellen separate Tabellen für jeden Typ, wiederholen dabei aber gemeinsame Attribute:


| Mitarbeiter |   | Schüler      |
|-------------|   |--------------|
| PersonID(PK)|   | PersonID(PK) |
| Name        |   | Name         |
| MitarbeiterID|  | SchülerID    |
| Abteilung   |   | Fach         |

Dieser Ansatz vermeidet Nullwerte, kann aber zu Datenredundanzen führen.

Schlussfolgerung

Und da habt ihr es, Leute! Wir haben uns von der konzeptionellen Welt der ER-Modelle auf den konkreten Bereich der relationalen Datenbanken begeben. Denkt daran, Übung macht den Meister. Versucht, eigene ER-Diagramme zu erstellen und sie in relationale Modelle umzuwandeln. Bevor ihr es wisst, werdet ihr die Sprache der Datenbanken fließend sprechen!

Weiterlernen, weiterwachsen und vor allem: Spaß an euren Datenbanken haben. Bis下次, fröhliches Coden!

Credits: Image by storyset