Normalisierung

Man kann sich eine Datenbank als eine Tabelle vorstellen, in der alle Daten in Zeilen und Spalten angeordnet sind.

Wir betrachten als Beispiel den naturwissenschaftlichen Unterricht der Gymnasien einer Stadt.

LEHRER (KUERZ, NAME, TITEL, ANREDE, SCHULE, SCHULNAME, FACH, KLASSE)

KUERZ ANREDE ANREDE NAME SCHULE SCHULNAMME FACH KLASSE
FI Herr StR Fisch OHG Otto-Hahn-Gymnasium CH
PH
9a
KA Herr StD Kater FKG Felix-Klein-Gymnasium CH
PH
8c
CH
PH
9a
KA Frau OStR' Katze OHG Otto-Hahn-Gymnasium BI
MA
8b

Eine solche Tabelle wird in den meisten Fällen groß ausfallen und unübersichtlich sein. Dadurch besteht dann die Gefahr von Fehlern bei der Datenpflege.

Es ist sinnvoll, die Tabelle in mehrere kleinere Tabellen aufzuteilen. Dadurch können auch Zugriffsrechte einfacher definiert werden.

Das Aufteilen der Daten in getrennte Relationen soll so erfolgen, dass

  1. bei den üblichen Datenoperationen (DELETE, UPDATE, INSERT) keine fehlerhaften Ergebnisse entstehen
  2. bei Einführung neuer Daten (Attribute, Entities, Beziehungen) keine völlige Umstrukturierung erforderlich wird
  3. Redundanzen (doppelte Einträge) beseitigt werden
  4. ein verständliches Datenmodell für Benutzer und Programmierer entsteht.

Wir bringen die Tabelle mit Blick auf die Punkte 1 und 2 zunächst in die 1. Normalform.

Eine Relation ist in der 1. Normalform (1NF), wenn alle Attribute nur atomare Werte (und keine Nullwerte) beinhalten.

Als Primärschlüssel führen wir die Attributkombination KUERZ, SCHULE, FACH, KLASSE ein.

LEHRER_1NF (KUERZ, SCHULE, FACH, KLASSE, NAME, TITEL, ANREDE, SCHULNAME)

KUERZ SCHULE FACH KLASSE ANREDE TITEL NAME SCHULNAMME
FI OHG CH 9a Herr StR Fisch Otto-Hahn-Gymnasium
FI OHG PH 9a Herr StR Fisch Otto-Hahn-Gymnasium
KA FKG CH 8c Herr StD Kater Felix-Klein-Gymnasium
KA FKG PH 8c Herr StD Kater Felix-Klein-Gymnasium
KA FKG CH 9a Herr StD Kater Felix-Klein-Gymnasium
KA FKG PH 9a Herr StD Kater Felix-Klein-Gymnasium
KA OHG BI 8b Frau OStR' Katze Otto-Hahn-Gymnasium
KA OHG MA 8b Frau OStR' Katze Otto-Hahn-Gymnasium

Die Tabelle enthält nun unnötig viele Wiederholungen. Zum Beispiel ist durch das Schulkürzel der Schulname eindeutig festgelegt, so dass er nicht immer wieder aufgeschrieben werden muss.

Wir erkennen weitere Abhängigkeiten und führen zusätzliche Tabellen ein.

Eine Relation ist in der 2. Normalform (2NF), wenn sie sich in der 1. Normalform befindet und jedes Nicht-Schlüssel-Attribut funktional abhängig ist vom Gesamtschlüssel, nicht aber von einzelnen Schlüsselteilen.

Die zweite Normalform kann also nur verletzt werden, wenn der Primärschlüssel aus mehr als einem Attribut zusammengesetzt ist.

In einer Relation heißt das Attribut B vom Attribut A funktional abhängig, falls zu jedem Wert des Attributs A genau ein Wert des Attributs B gehört (falls also die Abbildung f: A → B eindeutig ist).
Das Attribut B heißt voll funktional abhängig vom Gesamtschlüssel, wenn B von den zusammen­gesetzten Schlüsselattributen funktional abhängig ist, aber nicht von einem einzelnen Schlüsselteil.

In unserem Beispiel sind ANREDE, TITEL, NAME, SCHULNAME von einzelnen Schlüsselteilen abhängig. Wir entfernen diese Attribute aus der Tabelle und notieren den Zusammenhang in zusätzlichen Tabellen.

UNTERRICHT_2NF (KUERZ, SCHULE, FACH, KLASSE)

KUERZ SCHULE FACH KLASSE
FI OHG CH 9a
FI OHG PH 9a
KA FKG CH 8c
KA FKG PH 8c
KA FKG CH 9a
KA FKG PH 9a
KA OHG BI 8b
KA OHG MA 8b

LEHRER_2NF (KUERZ, SCHULE, ANREDE, TITEL, NAME)

KUERZ SCHULE ANREDE TITEL NAME
FI OHG Herr StR Fisch
KA FKG Herr StD Kater
KA OHG Frau OStR' Katze

SCHULE_2NF (SKUERZ, SNAME)

KUERZ NAME
FKG Felix-Klein-Gymnasium
OHG Otto-Hahn-Gymnasium

Auch in 2. Normalform enthält LEHRER noch Redundanzen. Durch Angabe des Titels ist auch die Anrede festgelegt, so dass sie nicht immer wieder aufgeschrieben werden muss.

Eine Relation ist in der 3. Normalform, wenn sie sich in der 2. Normalform befindet und keine funktionale Abhängigkeit zwischen Attributen besteht, die nicht als Schlüssel definiert sind.

Nicht-Schlüssel-Attribute müssen also immer vom vollständigen Schlüssel funktional abhängig sein und nur von diesem.

Das erste Diagramm legt unmittelbar eine kurze (sogar etwas schärfere) Forderung nahe. In unserem Beispiel ist ANREDE nämlich transitiv abhängig vom Gesamtschlüssel.

Eine Relation ist in Boyce-Codd-Normalform (BCNF), wenn sie in der ersten Normalform ist und kein Attribut vom Schlüssel transitiv abhängt.

Ein Attribut B heißt transitiv abhängig vom Schlüsselattribut S, wenn B von einem Attribut A funktional abhängig ist und A wiederum funktional abhängig von S, jedoch umgekehrt S nicht von A.

LEHRER_2NF (KUERZ, SCHULE, TITEL, NAME)

KUERZ SCHULE ANREDE NAME
FI OHG StR Fisch
KA FKG StD Kater
KA OHG OStR' Katze

ANREDE_2NF (TITEL, ANREDE)

TITEL ANREDE
StR Herr
StD Herr
OStR' Frau

In diesem konstruierten Beispiel unterrichten alle Lehrer in jeder ihrer Klassen ihre beiden Fächer. Das führt zu unnötigen Doppeleinträgen.

Eine Relation ist in der 4. Normalform, wenn sie in der 2. Normalform ist und sie keine paarweise auftretenden mehrwertigen Abhängigkeiten enthält.

Ein Attribut B heißt mehrwertig abhängig vom Attribut A, falls zu jedem Attributwert von A dieselbe Menge von B-Werten gehört, unabhängig von den Werten der restlichen Attribute.

In unserem Beispiel ist das Attribut FACH mehrwertig abhängig vom Attribut Klasse:

KUERZ SCHULE FACH KLASSE
FI OHG CH 9a
FI OHG PH 9a
KA FKG CH 8c
KA FKG PH 8c
KA FKG CH 9a
KA FKG PH 9a
KA OHG BI 8b
KA OHG MA 8b

Wir teilen die Tabelle auf. Dann ist nur eine Tabellenzeile zu bearbeiten, wenn Lehrer FI nicht mehr Klassenlehrer der 9a ist.

LEHRERFACH_4NF (KUERZ, SCHULE, FACH)

KUERZ,SCHULE ist Fremdschlüssel aus LEHRER.

KUERZ SCHULE FACH
FI OHG CH
FI OHG PH
KA FKG CH
KA FKG PH
KA OHG BI
KA OHG MA

LEHRERKLASSE_4NF (KUERZ, SCHULE, KLASSE)

KUERZ SCHULE KLASSE
FI OHG 9a
KA FKG 8c
KA FKG 9a
KA OHG 8b