Datenbanknormalisierung: 1NF, 2NF und 3NF
Bei der Datenbanknormalisierung zerlegst du eine unübersichtliche relationale Tabelle schrittweise in mehrere sinnvoll verbundene Tabellen. Dadurch speicherst du gleiche Sachverhalte möglichst nur einmal und verringerst widersprüchliche Änderungen.
Auf dieser Seite lernst du, Verstöße gegen die erste, zweite und dritte Normalform zu erkennen und eine Tabelle begründet bis zur 3NF zu normalisieren.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Warum werden Tabellen normalisiert?
Stell dir vor, Schülerdaten, Lernangebote und absolvierte Stunden stehen gemeinsam in einer einzigen Tabelle. Namen, Klassen und Angebotsbeschreibungen erscheinen dann mehrfach.
Diese Redundanz ist mehr als ein Platzproblem. Sie kann Anomalien verursachen:
- Änderungsanomalie: Wechselt die Klassenleitung der 11a, muss der Name in mehreren Zeilen geändert werden. Bleibt eine Zeile unverändert, widersprechen sich die Daten.
- Einfügeanomalie: Ein neues Lernangebot lässt sich möglicherweise erst speichern, wenn bereits ein Schüler daran teilnimmt.
- Löschanomalie: Wird die letzte Teilnahme an einem Angebot gelöscht, kann zugleich dessen einzige Beschreibung verschwinden.
Normalisierung ordnet deshalb jeden Sachverhalt dort ein, wo er eindeutig hingehört. Schülerdaten stehen in einer Schülertabelle, Angebotsdaten in einer Angebotstabelle und Teilnahmen in einer Verknüpfungstabelle.
Normalisierung verringert vermeidbare Redundanz und schützt so die Konsistenz der Daten. Sie bedeutet nicht, dass derselbe Wert niemals mehrfach vorkommen darf: Fremdschlüssel werden bewusst wiederholt, um Tabellen zu verbinden.
Schlüssel und Abhängigkeiten verstehen
Bevor du normalisierst, musst du klären, wodurch ein Datensatz eindeutig bestimmt wird.
Primärschlüssel
Ein Primärschlüssel ist das ausgewählte Attribut oder die ausgewählte Attributkombination, die jede Zeile eindeutig identifiziert. Ein zusammengesetzter Primärschlüssel besteht aus mehreren Attributen.
Fremdschlüssel
Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen Tabelle. Er verbindet zusammengehörige Datensätze, ohne deren übrige Angaben zu wiederholen.
Funktionale Abhängigkeit
A → B bedeutet: Zu jedem Wert von A gehört genau ein Wert von B. Man sagt: A bestimmt B funktional.
Im Schulbeispiel gelten diese Abhängigkeiten:
SchülerNr → Name, Vorname, Klasse, KlassenlehrerLernangebotsNr → Beschreibung(SchülerNr, LernangebotsNr) → Zeit in hKlasse → Klassenlehrer
Die Zeit hängt von der Kombination aus Schüler und Lernangebot ab. Die Schülernummer allein genügt nicht, weil derselbe Schüler in verschiedenen Angeboten unterschiedlich viele Stunden haben kann. Auch die Angebotsnummer allein genügt nicht, weil verschiedene Schüler im selben Angebot unterschiedlich viele Stunden absolvieren können.
Für Schüler 3 stehen unter anderem diese Teilnahmen in der Tabelle:
| SchülerNr | LernangebotsNr | Zeit in h |
|---|---|---|
| 3 | 1 | 15 |
| 3 | 2 | 12 |
| 3 | 3 | 2 |
Erst das Paar (SchülerNr, LernangebotsNr) bestimmt eine Teilnahme eindeutig. Dieses Paar kann daher als zusammengesetzter Primärschlüssel dienen.
Erste Normalform: Listen aus Zellen entfernen
Eine Tabelle verletzt die erste Normalform, wenn eine Zelle mehrere gleichartige Werte enthält. Das geschieht zum Beispiel bei kommaseparierten Listen.
Erste Normalform
Eine Relation ist in der ersten Normalform (1NF), wenn jedes Attribut pro Zeile genau einen atomaren, also im gewählten Datenmodell nicht weiter aufzuteilenden Wert enthält. Listen und Wiederholungsgruppen sind nicht erlaubt.
Ein problematischer Ausschnitt lautet:
| SchülerNr | LernangebotsNr | Beschreibung | Zeit in h |
|---|---|---|---|
| 3 | 1, 2, 3 | Elektronik, Tanz, Chor | 15, 12, 2 |
Die Zuordnung der drei Nummern, Beschreibungen und Stunden beruht nur auf ihrer Position in den Listen. Einzelne Teilnahmen lassen sich schlecht filtern, verändern oder mit einem Schlüssel kennzeichnen.
Für die 1NF erhält jede Teilnahme eine eigene Zeile:
| SchülerNr | LernangebotsNr | Beschreibung | Zeit in h |
|---|---|---|---|
| 3 | 1 | Elektronik | 15 |
| 3 | 2 | Tanz | 12 |
| 3 | 3 | Chor | 2 |
Nun enthält jede Zelle genau einen Wert. Der neue zusammengesetzte Primärschlüssel ist (SchülerNr, LernangebotsNr).
Ob ein Wert atomar ist, hängt vom Zweck der Datenbank ab. Ein vollständiger Name kann für eine bloße Anzeige genügen. Soll nach Nachnamen sortiert werden, sind getrennte Attribute für Vor- und Nachname sinnvoll. Eindeutig problematisch sind hier die mehreren Lernangebote in einer Zelle.
Zweite Normalform: Partielle Abhängigkeiten beseitigen
Nach der Umformung zur 1NF werden Schüler- und Angebotsdaten in mehreren Teilnahmezeilen wiederholt. Der Grund liegt im zusammengesetzten Schlüssel.
Partielle Abhängigkeit
Eine partielle Abhängigkeit liegt vor, wenn ein Nichtschlüsselattribut bereits von einem echten Teil eines zusammengesetzten Schlüsselkandidaten bestimmt wird.
Zweite Normalform
Eine Relation ist in der zweiten Normalform (2NF), wenn sie in 1NF ist und jedes Nichtschlüsselattribut voll vom gesamten Schlüsselkandidaten abhängt. Es darf keine partielle Abhängigkeit geben.
Der Schlüssel der Teilnahme ist (SchülerNr, LernangebotsNr). Nun prüfst du jedes Nichtschlüsselattribut:
Name,Vorname,KlasseundKlassenlehrerhängen nur vonSchülerNrab.Beschreibunghängt nur vonLernangebotsNrab.Zeit in hhängt vom gesamten Paar ab.
Deshalb zerlegst du die Tabelle so:
| Relation | Attribute | Primärschlüssel |
|---|---|---|
Schüler | SchülerNr, Name, Vorname, Klasse, Klassenlehrer | SchülerNr |
Lernangebot | LernangebotsNr, Beschreibung | LernangebotsNr |
Teilnahme | SchülerNr, LernangebotsNr, Zeit in h | SchülerNr + LernangebotsNr |
In Teilnahme sind SchülerNr und LernangebotsNr zugleich Fremdschlüssel. Sie verweisen auf die beiden anderen Tabellen.
Die Teilnahme (3, 2, 12) bedeutet:
SchülerNr 3verweist auf Franz Jäger in der TabelleSchüler.LernangebotsNr 2verweist auf Tanz in der TabelleLernangebot.- Die Teilnahme selbst speichert nur die zu dieser Kombination gehörenden 12 Stunden.
So kann die vollständige Information durch das Verbinden der Tabellen wieder zusammengesetzt werden, ohne Namen und Angebotsbeschreibung in jeder Teilnahme zu wiederholen.
Frage bei einem zusammengesetzten Schlüssel: „Bestimmt schon ein echter Schlüsselteil dieses Attribut?“ Lautet die Antwort ja, ist die 2NF verletzt.
Dritte Normalform: Transitive Abhängigkeiten beseitigen
Die Tabelle Schüler ist nach der Zerlegung zwar in 2NF, enthält aber noch zwei Sachverhalte: Angaben zum Schüler und die Klassenleitung.
Transitive Abhängigkeit
Eine transitive Abhängigkeit liegt im hier betrachteten Fall vor, wenn ein Schlüssel ein Nichtschlüsselattribut bestimmt und dieses wiederum ein weiteres Nichtschlüsselattribut bestimmt: Schlüssel → A → B.
Dritte Normalform
Eine Relation ist in der dritten Normalform (3NF), wenn sie in 2NF ist und kein Nichtschlüsselattribut über ein anderes Nichtschlüsselattribut vom Schlüssel abhängt.
Für Schüler gilt:
SchülerNr → KlasseKlasse → Klassenlehrer
Damit hängt Klassenlehrer transitiv von SchülerNr ab. Die Klassenleitung gehört fachlich zur Klasse, nicht zu einem einzelnen Schüler.
Du lagerst diese Abhängigkeit aus:
| Relation | Attribute | Schlüssel und Verweise |
|---|---|---|
Schüler | SchülerNr, Name, Vorname, Klasse | PK: SchülerNr; Klasse als FK |
Klasse | Klasse, Klassenlehrer | PK: Klasse |
Lernangebot | LernangebotsNr, Beschreibung | PK: LernangebotsNr |
Teilnahme | SchülerNr, LernangebotsNr, Zeit in h | zusammengesetzter PK; beide Nummern als FK |
Beispieldaten für Klasse sind (11a, Lempel), (12a, Breier) und (11b, Sommer). In Schüler bleibt nur die jeweilige Klasse als Verweis stehen.
Soll die Klassenleitung der 11a geändert werden, bearbeitest du nun genau den Datensatz der Klasse 11a. Alle Schüler dieser Klasse verweisen weiterhin auf denselben Klassendatensatz. Widersprüchliche Namen der Klassenleitung in einzelnen Schülerzeilen können dadurch nicht entstehen.
Prüfe für die 3NF: „Bestimmt ein Nichtschlüsselattribut ein anderes Nichtschlüsselattribut?“ Falls ja, lagere den dadurch beschriebenen Sachverhalt in eine eigene Tabelle aus und behalte den passenden Fremdschlüssel.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- Datenbanknormalisierung
- Ziel: Redundanz und Anomalien verringern
- Grundlage: Schlüssel und funktionale Abhängigkeiten
- 1NF: einzelne atomare Werte
- 2NF: keine Abhängigkeit von einem echten Schlüsselteil
- 3NF: keine transitive Abhängigkeit über ein Nichtschlüsselattribut
- Ergebnis: verbundene Tabellen mit Primär- und Fremdschlüsseln
Gehe beim Normalisieren immer in derselben Reihenfolge vor:
- Bestimme den Sachverhalt und mögliche Schlüssel.
- Schreibe die funktionalen Abhängigkeiten auf.
- Stelle atomare Werte und damit die 1NF her.
- Beseitige partielle Abhängigkeiten für die 2NF.
- Beseitige transitive Abhängigkeiten für die 3NF.
- Prüfe, ob die Tabellen über Fremdschlüssel wieder sinnvoll verbunden werden können.
Abschluss-Check
Wenn du die drei Prüffragen sicher beantworten kannst — „Enthält eine Zelle mehrere Werte?“, „Hängt etwas nur von einem Schlüsselteil ab?“ und „Bestimmt ein Nichtschlüsselattribut ein anderes?“ — kannst du typische Tabellen systematisch bis zur 3NF normalisieren.
Mit Google fortfahren