Normalisierung beurteilen
Die drei Normalformen sind ein Verfahren, kein Naturgesetz. Zum Handwerk gehört auch die Frage, wann man abweicht – und was das kostet.
Was die Normalisierung leistet
| Schritt | Beseitigt | Preis |
|---|---|---|
| 1NF | mehrwertige Attributwerte | mehr Zeilen, zunächst mehr Redundanz |
| 2NF | partielle Abhängigkeiten | eine Relation mehr je Abhängigkeit |
| 3NF | transitive Abhängigkeiten | eine Relation mehr je Abhängigkeit |
Der gemeinsame Nutzen: Jede Information steht genau einmal. Damit sind die drei Anomalien ausgeschlossen – nicht erschwert, sondern strukturell unmöglich.
Der gemeinsame Preis: mehr Tabellen und damit mehr Verbunde in jeder Abfrage.
Der Preis, konkret
Dieselbe Frage – „Wer spielt wann auf welcher Bühne?" – einmal an der unnormalisierten und einmal an der normalisierten Datenbank:
a) Beide liefern dasselbe. Vergleiche die beiden Abfragen: Was hat die Normalisierung für den Menschen, der die Abfrage schreibt, schwieriger gemacht?
b) Warum nimmt man diesen Nachteil trotzdem in Kauf?
c) Nenne eine Frage, die an der normalisierten Datenbank leichter zu beantworten ist als an der unnormalisierten.
Wann man bewusst abweicht
Denormalisierung ist die absichtliche Rücknahme eines Normalisierungsschritts, um Abfragen zu beschleunigen. Man nimmt Redundanz in Kauf und muss sie dann selbst konsistent halten.
Denormalisierung ist ein letztes Mittel, kein Ausgangspunkt. Drei Bedingungen sollten erfüllt sein:
- Es gibt ein gemessenes Geschwindigkeitsproblem – nicht ein vermutetes.
- Die betroffenen Daten ändern sich selten oder gar nicht.
- Es gibt einen Mechanismus, der die Kopien synchron hält – ein Trigger, ein nächtlicher Abgleich, ein Neuaufbau.
Fehlt Punkt 3, ist es keine Denormalisierung, sondern nur ein schlechtes Schema.
Ein Beispiel, das man häufig sieht: In auftritt eine zusätzliche Spalte bandname – dann spart jede Anzeige des Spielplans einen Verbund.
Was spricht dagegen? Bandnamen ändern sich selten, aber sie ändern sich. Und man müsste jeden UPDATE auf band.name daran erinnern, auch alle Auftrittszeilen anzufassen. Wer das vergisst, hat genau die Änderungsanomalie zurück, gegen die die Normalisierung antritt.
Bei 46 Auftritten wäre das ein Handel ohne jeden Gewinn. Bei 46 Millionen kann es der richtige sein – aber dann als bewusste, dokumentierte Entscheidung.
Historische Werte sind keine Redundanz
Ein Wert, der zu einem Vorgang gehört, ist auch dann kein Verstoß, wenn er anderswo noch einmal steht:
- der
preiseines Tickets neben dem aktuellen Kategoriepreis - der
einzelpreiseiner Bestellposition neben dem aktuellen Artikelpreis - die Anschrift auf einer Rechnung neben der aktuellen Kundenanschrift
In allen drei Fällen gilt keine funktionale Abhängigkeit von der jeweils anderen Tabelle: Der historische Wert ist gerade nicht durch den aktuellen bestimmt. Es liegt also kein Normalisierungsverstoß vor.
Die Prüffrage lautet immer: Ist der Wert aus dem anderen ableitbar – heute und in fünf Jahren?
Übung: Ein Schema beurteilen
Ein Sportverein verwaltet seine Kurse so:
kursbuchung(mitglied_id, kurs_id, mitgliedsname, mitglieds_plz, mitglieds_ort,
kurstitel, trainer_id, trainername, wochentag, gebuehr_bezahlt)
Primärschlüssel: mitglied_id, kurs_id
a) Beurteile das Schema nach den Kriterien aus Kapitel 5. Nenne für jeden Mangel Kriterium, Beleg und Folge.
b) Führe die Normalisierung bis zur 3. Normalform durch.
c) Der Verein sagt: „Wir haben 300 Mitglieder und 20 Kurse. Der Aufwand lohnt sich für uns nicht." Nimm dazu begründet Stellung.
Tipp zu a)
Achte besonders auf mitglieds_plz und mitglieds_ort – dort steckt eine Abhängigkeit, die man leicht übersieht.