🏗️ 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

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.

🎯 Aufgaben & Checkliste in aufgabe.sql

💻 In Web-IDE öffnen → ← Zurück zu SQL 06 Weiter zu SQL 08 →