Coding Garden
Anmelden

Vom ER-Diagramm zur Tabelle

Du hast gelernt, wie du Entities erkennst, Attribute definierst, Beziehungen modellierst und alles in einem ER-Diagramm visualisierst. Jetzt kommt der letzte Schritt: Die Umsetzung in konkrete Tabellen. In diesem Artikel lernst du, wie du dein ER-Diagramm systematisch in eine Tabellenstruktur übersetzt.

Die Übersetzungsregeln

Die Übersetzung vom ER-Diagramm zu Tabellen folgt klaren Regeln:

  1. Jede Entity wird eine Tabelle
  2. Jedes Attribut wird eine Spalte
  3. Der Primärschlüssel identifiziert Datensätze eindeutig
  4. 1:n Beziehungen werden über Fremdschlüssel abgebildet
  5. n:m Beziehungen brauchen eine Zwischentabelle

Regel 1: Entity → Tabelle

Jede Entity aus dem ER-Diagramm wird zu einer eigenen Tabelle.

ER-Diagramm: Entity Kunde

Text
┌─────────────┐
│   Kunde     │
├─────────────┤
│ KundenID PK │
│ Name        │
│ Email       │
│ Stadt       │
└─────────────┘

Tabelle: kunden

Kunden-Tabelle
KundenIDNameEmailStadt
1Anna Mülleranna@beispiel.deBerlin
2Tom Schmidttom@beispiel.deHamburg
Tip
Tabellennamen werden oft im Plural und kleingeschrieben: kunden, buecher, bestellungen. Sei konsistent in deinem Projekt.

Regel 2: Attribute → Spalten

Jedes Attribut der Entity wird zu einer Spalte in der Tabelle. Du musst für jede Spalte einen Datentyp festlegen.

Häufige Datentypen

DatentypVerwendungBeispiel
INTGanze ZahlenAlter, Anzahl, IDs
VARCHAR(n)Text mit max. n ZeichenName, Email, Stadt
TEXTLanger TextBeschreibung, Biografie
DATEDatumGeburtsdatum, Bestelldatum
DECIMAL(m,n)DezimalzahlenPreis, Gehalt
BOOLEANWahr/FalschVerfügbar, Aktiv

Beispiel: Kunden-Tabelle mit Datentypen

SpalteDatentypBegründung
KundenIDINTEindeutige Nummer
NameVARCHAR(100)Text bis 100 Zeichen
EmailVARCHAR(150)Emails können lang sein
StadtVARCHAR(50)Städtenamen sind kürzer
Note
Datentypen werden in einem späteren Artikel ausführlich behandelt. Für jetzt reicht es, die Grundtypen zu kennen.

Regel 3: Primärschlüssel definieren

Der Primärschlüssel aus dem ER-Diagramm wird in der Tabelle speziell markiert.

Eigenschaften eines Primärschlüssels:

  • UNIQUE - Jeder Wert kommt nur einmal vor
  • NOT NULL - Darf nie leer sein
  • UNVERÄNDERLICH - Sollte sich nie ändern

Zwei Arten von Primärschlüsseln

1. Natürlicher Schlüssel

Ein bestehendes Attribut, das natürlich eindeutig ist:

  • ISBN bei Büchern
  • Email bei Benutzern (problematisch, da änderbar)
  • Sozialversicherungsnummer

2. Künstlicher Schlüssel (Surrogate Key)

Eine künstlich erzeugte ID:

  • KundenID, BestellungID, BuchID
  • Meist eine fortlaufende Nummer
  • Wird automatisch vergeben (AUTO_INCREMENT)
Tip
In der Praxis nutzt man fast immer künstliche IDs. Sie sind einfach, ändern sich nie und funktionieren immer.

Regel 4: 1:n Beziehungen umsetzen

Bei einer 1:n Beziehung wird auf der "n"-Seite ein Fremdschlüssel hinzugefügt.

Beispiel: Kunde → Bestellung (1:n)

Ein Kunde kann viele Bestellungen haben.

Text
┌─────────────┐           ┌─────────────────┐
│   Kunde     │           │   Bestellung    │
├─────────────┤           ├─────────────────┤
│ KundenID PK │───────○╫──│ BestellungID PK │
│ Name        │           │ Datum           │
│ Email       │           │ KundenID FK     │ ← Fremdschlüssel
└─────────────┘           └─────────────────┘

Umsetzung in Tabellen

Tabelle: kunden

KundenIDNameEmail
1Anna Mülleranna@beispiel.de
2Tom Schmidttom@beispiel.de

Tabelle: bestellungen

BestellungIDDatumKundenID
10012024-01-151
10022024-01-201
10032024-01-222

Die KundenID in der Bestellungen-Tabelle verweist auf die Kunden-Tabelle. Das ist der Fremdschlüssel.

Important
Merke: Der Fremdschlüssel kommt immer auf die "n"-Seite (viele), nie auf die "1"-Seite.

Regel 5: n:m Beziehungen umsetzen

n:m Beziehungen können nicht direkt in Tabellen abgebildet werden. Du brauchst eine Zwischentabelle.

Beispiel: Student ↔ Kurs (n:m)

Ein Student belegt viele Kurse. Ein Kurs wird von vielen Studenten besucht.

Text
┌─────────────┐      ┌──────────────┐      ┌─────────────┐
│  Student    │      │ Einschreibung│      │    Kurs     │
├─────────────┤      ├──────────────┤      ├─────────────┤
│ StudentID PK│──○╫──│ StudentID FK │      │ KursID PK   │
│ Name        │      │ KursID FK    │──○╫──│ Name        │
│ Matrikel    │      │ Note         │      │ Credits     │
└─────────────┘      └──────────────┘      └─────────────┘

Umsetzung in Tabellen

Tabelle: studenten

StudentIDNameMatrikel
1Lisa WeberMAT001
2Max BauerMAT002

Tabelle: kurse

KursIDNameCredits
1Datenbanken5
2Webentwicklung4

Tabelle: einschreibungen (Zwischentabelle)

StudentIDKursIDNote
111.7
122.0
212.3

Die Zwischentabelle enthält:

  • StudentID (Fremdschlüssel → studenten)
  • KursID (Fremdschlüssel → kurse)
  • Optional: Zusätzliche Attribute wie Note
Tip
Der Primärschlüssel der Zwischentabelle ist meist die Kombination aus beiden Fremdschlüsseln: (StudentID, KursID).

Regel 6: 1:1 Beziehungen umsetzen

Bei 1:1 Beziehungen gibt es zwei Möglichkeiten:

Option 1: Alles in einer Tabelle

Wenn die Daten eng zusammengehören, kannst du sie in eine Tabelle packen.

Beispiel: Person mit Reisepass → Alle Felder in die Person-Tabelle.

Option 2: Separate Tabellen mit Fremdschlüssel

Wenn du die Daten trennen möchtest (z.B. aus Sicherheitsgründen):

Personen-Tabelle
PersonIDNameGeburtsdatum
1Anna Müller1990-05-15
Reisepässe-Tabelle
PassIDNummerPersonID (FK)
1C012345671

Der Fremdschlüssel kann auf einer der beiden Seiten sein. Meist auf der Seite, die abhängig ist (Reisepass hängt von Person ab).

Komplettes Beispiel: Bibliothek

Übersetzen wir unser komplettes Bibliotheks-ER-Diagramm in Tabellen:

Tabelle: autoren

SpalteDatentypEigenschaften
AutorIDINTPRIMARY KEY, AUTO_INCREMENT
NameVARCHAR(100)NOT NULL
GeburtsjahrINTNULL
NationalitaetVARCHAR(50)NULL

Tabelle: genres

SpalteDatentypEigenschaften
GenreIDINTPRIMARY KEY, AUTO_INCREMENT
NameVARCHAR(50)NOT NULL
BeschreibungTEXTNULL

Tabelle: buecher

SpalteDatentypEigenschaften
BuchIDINTPRIMARY KEY, AUTO_INCREMENT
TitelVARCHAR(200)NOT NULL
ISBNVARCHAR(20)UNIQUE
ErscheinungsjahrINTNULL
SeitenzahlINTNULL
AutorIDINTFOREIGN KEY → autoren
GenreIDINTFOREIGN KEY → genres

Tabelle: mitglieder

SpalteDatentypEigenschaften
MitgliedsIDINTPRIMARY KEY, AUTO_INCREMENT
VornameVARCHAR(50)NOT NULL
NachnameVARCHAR(50)NOT NULL
EmailVARCHAR(100)UNIQUE, NOT NULL
TelefonVARCHAR(20)NULL
AdresseVARCHAR(200)NULL
BeitrittsdatumDATENOT NULL

Tabelle: ausleihen (Zwischentabelle)

SpalteDatentypEigenschaften
AusleihIDINTPRIMARY KEY, AUTO_INCREMENT
AusleihdatumDATENOT NULL
RueckgabedatumDATENOT NULL
TatsaechlicheRueckgabeDATENULL
BuchIDINTFOREIGN KEY → buecher
MitgliedsIDINTFOREIGN KEY → mitglieder

Wichtige Constraints (Einschränkungen)

Beim Erstellen von Tabellen definierst du Constraints – Regeln, die die Datenbank durchsetzt:

ConstraintBedeutungBeispiel
PRIMARY KEYEindeutiger IdentifierKundenID
FOREIGN KEYVerweis auf andere TabelleKundenID in Bestellungen
NOT NULLDarf nicht leer seinName, Email
UNIQUEWert muss einzigartig seinEmail, ISBN
DEFAULTStandardwert wenn nichts angegebenStatus = 'aktiv'
AUTO_INCREMENTAutomatisch hochzählenIDs: 1, 2, 3, ...

Checkliste: ER-Diagramm → Tabellen

Gehe diese Schritte durch, um dein ER-Diagramm umzusetzen:

  1. ☑ Für jede Entity eine Tabelle erstellen
  2. ☑ Für jedes Attribut eine Spalte mit passendem Datentyp
  3. ☑ Primärschlüssel definieren (meist INT AUTO_INCREMENT)
  4. ☑ NOT NULL für Pflichtfelder setzen
  5. ☑ UNIQUE für eindeutige Felder (Email, ISBN)
  6. ☑ Für 1:n Beziehungen: Fremdschlüssel auf "n"-Seite
  7. ☑ Für n:m Beziehungen: Zwischentabelle erstellen
  8. ☑ FOREIGN KEY Constraints definieren
  9. ☑ DEFAULT-Werte wo sinnvoll

Übung: E-Commerce umsetzen

Gegeben ist dieses vereinfachte ER-Diagramm für einen Online-Shop:

  • Entity Kunde: KundenID, Name, Email
  • Entity Produkt: ProduktID, Name, Preis, Lagerbestand
  • Entity Bestellung: BestellungID, Datum, Status
  • Beziehung: Kunde → Bestellung (1:n)
  • Beziehung: Bestellung ↔ Produkt (n:m, braucht Zwischentabelle)

Aufgabe: Erstelle die Tabellenstruktur mit Spalten und Datentypen.

Lösung

Tabelle: kunden

  • KundenID - INT, PRIMARY KEY, AUTO_INCREMENT
  • Name - VARCHAR(100), NOT NULL
  • Email - VARCHAR(150), UNIQUE, NOT NULL

Tabelle: produkte

  • ProduktID - INT, PRIMARY KEY, AUTO_INCREMENT
  • Name - VARCHAR(200), NOT NULL
  • Preis - DECIMAL(10,2), NOT NULL
  • Lagerbestand - INT, DEFAULT 0

Tabelle: bestellungen

  • BestellungID - INT, PRIMARY KEY, AUTO_INCREMENT
  • Datum - DATE, NOT NULL
  • Status - VARCHAR(20), DEFAULT 'offen'
  • KundenID - INT, FOREIGN KEY → kunden

Tabelle: bestellpositionen (Zwischentabelle)

  • PositionID - INT, PRIMARY KEY, AUTO_INCREMENT
  • BestellungID - INT, FOREIGN KEY → bestellungen
  • ProduktID - INT, FOREIGN KEY → produkte
  • Menge - INT, NOT NULL, DEFAULT 1
  • Einzelpreis - DECIMAL(10,2), NOT NULL

Zusammenfassung

Die Umsetzung vom ER-Diagramm zu Tabellen folgt klaren Regeln:

  • Jede Entity wird eine Tabelle
  • Jedes Attribut wird eine Spalte mit Datentyp
  • Primärschlüssel identifiziert Datensätze eindeutig (meist INT AUTO_INCREMENT)
  • 1:n Beziehungen: Fremdschlüssel auf der "n"-Seite
  • n:m Beziehungen: Zwischentabelle mit beiden Fremdschlüsseln
  • 1:1 Beziehungen: Entweder eine Tabelle oder Fremdschlüssel auf einer Seite
  • Nutze Constraints: NOT NULL, UNIQUE, DEFAULT, FOREIGN KEY

Damit ist die Planungsphase abgeschlossen! Im nächsten Artikel lernst du, wie du diese Tabellen mit CREATE TABLE in SQL tatsächlich erstellst.