Dritte Normalform
Stand nach dem zweiten Schritt:
band(band, herkunftsland)
band_genre(band→band, genre)
auftritt(band→band, datum, beginn, buehne, buehnen_kapazitaet, dauer_min)
Ein Rest Redundanz ist geblieben. Sieh dir auftritt genau an: Neben jeder Bühne steht ihre Kapazität – 14-mal die 8000 der Hauptbühne.
Die Regel
Ein Relationenschema ist in der 3. Normalform (3NF), wenn es in der 2. Normalform ist und kein Nichtschlüsselattribut transitiv vom Primärschlüssel abhängt.
Eine transitive Abhängigkeit liegt vor, wenn es eine Kette gibt:
Schlüssel → X → Y
wobei X kein Schlüsselattribut ist. Dann hängt Y zwar vom Schlüssel ab – aber nur auf dem Umweg über X.
Die Kurzfassung, die man sich merken kann:
Jedes Nichtschlüsselattribut hängt vom Schlüssel ab, vom ganzen Schlüssel und von nichts als dem Schlüssel.
- „vom Schlüssel" → 1NF
- „vom ganzen Schlüssel" → 2NF
- „von nichts als dem Schlüssel" → 3NF
Der Verstoß
In auftritt(band, datum, beginn, buehne, buehnen_kapazitaet, dauer_min):
a) Finde die transitive Abhängigkeit. Schreibe die Kette auf.
b) Welche der drei Anomalien ist damit noch möglich? Nenne einen konkreten Fall.
c) Ist dauer_min auch transitiv abhängig? Begründe.
Tipp
Suche ein Nichtschlüsselattribut, das ein anderes Nichtschlüsselattribut bestimmt.
Die Überführung
So kommst du in die 3. Normalform:
Für jede transitive Abhängigkeit Schlüssel → X → Y:
- Lege eine neue Relation mit X und Y an. X wird ihr Primärschlüssel.
- Entferne Y aus der ursprünglichen Relation. X bleibt dort als Fremdschlüssel stehen.
Das ist dasselbe Vorgehen wie bei der 2. Normalform – nur ist X diesmal kein Schlüsselteil, sondern ein gewöhnliches Attribut.
buehne → buehnen_kapazitaet herausziehen:
buehne(buehne, kapazitaet)
auftritt(band→band, datum, beginn, buehne→buehne, dauer_min)
Das vollständige Ergebnis nach allen drei Schritten:
band(band, herkunftsland)
band_genre(band→band, genre)
buehne(buehne, kapazitaet)
auftritt(band→band, datum, beginn, buehne→buehne, dauer_min)
Vergleiche das mit der Klangwiese-Datenbank, mit der du seit Kapitel 1 arbeitest. Bis auf die künstlichen Schlüsselnummern ist es dasselbe Schema – einmal durch Modellierung entstanden, einmal durch Normalisierung.
Prüfe das Ergebnis: Ist jetzt jede Relation in der 3. Normalform? Gehe alle vier durch und begründe jeweils in einem Satz.
Übung
Ein Onlineshop verwaltet Bestellpositionen:
position(bestell_id, artikel_id, kundennummer, kundenname, artikelname,
kategorie_id, kategoriename, menge, einzelpreis)
Primärschlüssel: bestell_id, artikel_id
a) Schreibe alle funktionalen Abhängigkeiten auf.
b) Überführe schrittweise in die 1., 2. und 3. Normalform. Notiere nach jedem Schritt das vollständige Schema.
c) Der einzelpreis steht in der Bestellposition und nicht beim Artikel. Ist das ein Verstoß gegen die 3. Normalform? Begründe.
Tipp 1: Womit fängst du an?
Prüfe zuerst, ob die 1. Normalform überhaupt verletzt ist. Wenn alle Werte atomar sind, ist Schritt 1 schon erledigt.
Tipp 2: zu c)
Frage: Ändert sich der Preis eines Artikels im Lauf der Zeit? Und was soll dann auf einer alten Rechnung stehen?