πŸ—οΈ SQL Lehrpfad 2: Joins & Design

SQL 07: Datenbank-Normalisierung (1NF bis 3NF)

Verwandle redundante und fehleranfΓ€llige Tabellenstrukturen in ein sauberes, performantes und konsistentes 3NF-Datenbankschema.

πŸ“ 1. Die drei Stufen der Normalisierung

Die relationale Normalisierung verhindert Daten-Anomalien und Speicherverschwendung:

1. Normalform (1NF) – AtomaritΓ€t: Jede Zelle enthΓ€lt genau einen atomaren Einzelwert (keine AufzΓ€hlungen/Listen). Jede Zeile besitzt einen PrimΓ€rschlΓΌssel.
2. Normalform (2NF) – Volle funktionale AbhΓ€ngigkeit: 1NF erfΓΌllt + jedes Nicht-SchlΓΌssel-Attribut hΓ€ngt voll vom gesamten PrimΓ€rschlΓΌssel ab (keine TeilabhΓ€ngigkeiten).
3. Normalform (3NF) – Keine transitiven AbhΓ€ngigkeiten: 2NF erfΓΌllt + kein Nicht-SchlΓΌssel-Attribut hΓ€ngt von einem anderen Nicht-SchlΓΌssel-Attribut ab (z.B. PLZ → Ort).

πŸ›οΈ 2. Das saubere 3NF-Zielschema

Vom unΓΌbersichtlichen Monolithen zu fΓΌnf prΓ€zisen, miteinander verknΓΌpften EntitΓ€ten:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ orte β”‚ ◄────── β”‚ kunden β”‚ ◄────── β”‚ auftraege β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ PLZ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ KundeID β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ PK plz β”‚ β”‚ PK id β”‚ β”‚ PK id β”‚ β”‚ stadt β”‚ β”‚ name, email β”‚ β”‚ FK kunde_id β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ FK plz β”‚ β”‚ auftragsdatum β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ AuftragID β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ artikel β”‚ ◄──────────────────────────────────── β”‚ auftragspositionen β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ ArtikelID β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ PK id β”‚ β”‚ PK,FK auftrag_id β”‚ β”‚ bezeichnung β”‚ β”‚ PK,FK artikel_id β”‚ β”‚ einzelpreis β”‚ β”‚ menge β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
πŸ“¦ Didaktische Analogie: Der Baukasten statt Betonblock

Ein unnormalisierter Datensatz ist wie ein massiver Betonblock: MΓΆchte ein Kunde umziehen, musst du seinen Wohnort in 50 alten Bestellungen einzeln Γ€ndern (Γ„nderungsanomalie). In 3NF Γ€nderst du den Ort an genau EINER einzigen Stelle (orte) – fertig!

πŸ“‘ 3. Cheat-Sheet: Normalformen-Checkliste

Stufe Hauptkriterium GelΓΆste Anomalie
1NF Atomare Werte, PK vorhanden Verhindert unstrukturierte Listen in Textfeldern
2NF Keine Teil-AbhΓ€ngigkeiten von Teil-PKs Trennung von Artikelstammdaten und Auftragspositionen
3NF Keine transitiven AbhΓ€ngigkeiten Keine Redundanz bei Adress- & Ortsangaben

🎯 Aufgaben & Checkliste in aufgabe.sql

πŸ’» In Web-IDE ΓΆffnen → ← ZurΓΌck zu SQL 06 Weiter zu SQL 08 →