4. Der Königsweg: Normalisierung

 

4.1 Grundlagen

4.1.1 Was ist Normalisierung?

Überführung komplexer Beziehungen (Tabellen) in einfache Beziehungen durch Aufteilung der Attribute einer Tabelle auf mehrere Tabellen. Ziel sind stabile und flexible Datenstrukturen, die bei Erweiterungen möglichst wenig geändert werden müssen.

Die Normalisierung erfolgt in mehreren Schritten:


Wir werden im folgenden als Beispiel die Reisekostentabelle aus Abschnitt 3 betrachten.
Wir werden auch aufzeigen, in welche Tabelle die berechneten Datenfelder "Gesamtvergütung" und "Summe" (siehe Formular in Abschnitt 1) aufzunehmen sind, wenn sie nicht entfernt werden.

4.1.2 Das Schlüsselkonzept

Beispiel:
In der Reisekostentabelle ist der zusammengesetzte Schlüssel aus "Rechnungsnummer" und "Kostenart" der einzige Schlüsselkandidat und damit Primärschlüssel. Die Rechnungsnummer alleine genügt nicht als Primärschlüssel, da zu jeder Rechnungsnummer mehrere Kostenarten gehören können. Zusammengesetzte Primärschlüssel tauchen also typischerweise in Tabellen auf, die eine Wiederholungsgruppe enthalten.
 
Reisekosten
Rechnungs-
nummer
Datum Name Vorname Straße PLZ Ort Kostenart Anzahl Einzelvergütung
                   

Fettgedruckte Attribute: Primärschlüssel
 

4.2 Nullte Normalform

Die Datenelemente der realen Welt werden als Tabelle aufgelistet und berechnete Datenfelder möglichst entfernt. Die  Reisekostentabelle ist in der Nullten Normalform, d. h. unnormalisiert.
 

4.3 Erste Normalform (1NF)

4.3.1 Definition

Eine Relation ist in der Ersten Normalform, wenn jeder Attributwert atomar ist.

4.3.2 Erklärung

Ein Attributwert ist atomar, wenn er nicht aus mehreren Werten zusammengsetzt ist. So wäre z. B. der Attributwert (Klaus Müller, Elsenheimerstr. 7, 80187 München) nicht atomar, da er eine vollständige Adresse enthält, die in mehrere Attribut aufgeteilt werden kann.

Abhilfe:
Attribute mit Nicht-atomaren-Attributwerten werden in mehrere Attribute aufgeteilt. Eine Wiederholungsgruppe wird aus der Tabelle entfernt und in einer eigenen Tabelle untergebracht.

Unsere Reisekostentabelle enthält keine nicht-atomaren Attributwerte, ist also bereits in der ersten Normalform.
 

4.4 Zweite Normalform (2NF)

4.4.1 Definition

Eine Relation ist in der Zweiten Normalform, wenn sie in der Ersten Normalform ist und jedes Nicht-Schlüsselattribut von jedem Schlüsselkandidaten vollständig funktional abhängig ist.

4.4.2 Erklärung

Ein Attribut Y ist von einem Attribut X funktional abhängig, wenn es zu jedem X genau ein Y gibt.

Vollständig funktional abhängig bedeutet, daß das Nicht-Schlüsselattribut nicht nur von einem Teil der Attribute eines zusammengesetzten Schlüsselkandidaten funktional abhängig ist, sondern von allen Teilen.

Beispiel:
In der Reisekostentabelle sind die Attribute "Datum", "Name", "Vorname", "Straße", "PLZ" und "Ort" nur funktional abhängig vom Attribut "Rechnungsnummer" und völlig unabhängig vom Attribut "Kostenart".
Das Attribut "Einzelvergütung" ist dagegen nur funktional abhängig von der "Kostenart" und hat nichts mit der "Rechnungsnummer" zu tun. Lediglich das Attribut "Anzahl" ist vom zusammengesetzten Primärschlüssel voll funktional abhängig.

Abhilfe:
Datenfelder, die von einem Schlüsselkandidaten (hier nur der Primärschlüssel) nicht vollständig funktional abhängig sind, werden in weiteren Tabellen untergebracht. Der Teil des Schlüsselkandidaten, von dem ein ausgelagertes Datenfeld funktional abhängig ist, wird Primärschlüssel der neuen Tabelle. Als Ergebnis erhalten wird die drei folgenden Tabellen.
 

Reise
Rechnungsnummer Datum Name Vorname Straße PLZ Ort
             

 
Positionen
Rechnungsnummer Kostenart Anzahl
     

 
Kostenarten
Kostenart Einzelvergütung
   

Fettgedruckte Attribute: Primärschlüssel

Das berechnete Attribut "Summe" wäre hier in der Tabelle "Reise" zu führen. Das berechnete Attribut "Gesamtvergütung" kann nicht in "Positionen" geführt werden, da es nur von der "Anzahl" und der "Kostenart" funktional abhängig ist, aber nicht von der Rechnungsnummer. Das Attribut "Gesamtvergütung" könnte dann in einer weiteren Tabelle "Vergütung" mit den Attributen "Kostenart", "Anzahl" und "Gesamtvergütung" ("Kostenart" und "Anzahl" wären dann zusammengesetzter Primärschlüssel) untergebracht werden. Die berechneten Datenfelder verbleiben, falls sie mitgeführt werden, auch bei den folgenden Normalisierungen in den genannten Tabellen.

Beachten Sie:

4.4.3 Verbindung zwischen Tabellen

Jede Rechnungsnummer der Tabelle "Reise" kann in ein oder mehreren Zeilen der Tabelle "Positionen" auftauchen. Dies ist der Fall, wenn bei einer Rechnungsnummer mehrere Kostenarten zu berücksichtigen sind.
Man sagt: Zwischen den Tabellen "Reise" und "Positionen" besteht eine (sprich: eins zu n, eins zu viele).

Zwischen den Tabellen "Kostenarten" und "Positionen" besteht ebenfalls eine 1:n Beziehung, da jede in "Kostenarten" aufgeführte Kostenart mehrfach in der Tabelle "Positionen" erscheinen kann (nämlich bei verschiedenen Rechnungsnummern).

Dagegen besteht zwischen den Tabellen "Reise" und "Kostenarten" gar keine Beziehung, da sie kein gemeinsames Attribut aufweisen.

Wir werden in Abschnitt 5 näher auf Beziehungen zwischen Tabellen eingehen.
 

4.5 Dritte Normalform (3NF)

4.5.1 Definition

Eine Relation ist in der Dritten Normalform, wenn Sie in der Zweiten Normalform ist und jedes Nicht-Schlüssel-Attribut von keinem Schlüsselkandidaten transitiv abhängig ist.

4.5.2 Erklärung

Transitive Abhängigkeit:
Seien X, Y und Z Attribute. Ist Y von X funktional abhängig und Z von Y, so ist Z von X funktional abhängig. Diese Abhängigkeit ist transitiv.

Beispiel:
In der Tabelle "Reise" sind die Attribute "Vorname", "Straße" und "PLZ" abhängig vom Attribut "Name", nicht vom Primärschlüssel. Außerdem ist "Ort" abhängig von "PLZ" (X=Rechnungsnummer, Y=PLZ, Z=Ort; zu jeder Rechnungsnummer gehört eine PLZ und zu jeder PLZ ein Ort, also zu jeder Rechnungsnummer ein Ort).

Abhilfe:
Die transitiv abhängigen Datenfelder werden in weitere Tabellen ausgelagert, da sie nicht direkt vom Schlüsselkandidaten abhängen, sondern nur indirekt.
Da ein Name nicht eindeutig ist, wird jedem Angestellten eine Personalnummer zugeordnet. Diese ist Primärschlüssel der neuen Tabelle "Personal". Alternativ könnte ein zusammengesetzter Primärschlüssel aus Name, Vorname und Geburtsdatum benutzt werden (dieser sollte hinreichend eindeutig sein).
 

Reise
Rechnungsnummer Datum Personalnummer
     

 
Personal
Personalnummer Name Vorname Straße PLZ
     

 
PLZ
PLZ Ort
   

Fettgedruckte Attribute: Primärschlüssel

Wiederum besteht zwischen den Tabellen "Personal" und "Reise" sowie zwischen "PLZ" und "Personal" eine 1:n Beziehung, da ein Mitarbeiter mit einer bestimmten Personalnummer mehrere Dienstreisen machen kann und mehrere Mitarbeiter dieselbe Postleitzahl haben können.

Nach der dritten Normalisierung ergeben sich also folgende Tabellen, Datenfelder und Beziehungen:

Abbildung 3

Beachten Sie:


4.6 Boyce-Codd Normalform (BCNF)

4.6.1 Definition

Eine Relation ist in Boyce-Codd Normalform, wenn jeder Determinant ein Schlüsselkandidat ist.

4.6.2 Erklärung

Ein Determinant ist eine Attributmenge, von der ein anderes Attribut vollständig funktional abhängig ist.

Die Boyce-Codd-Normalform ist eine Weiterentwicklung der Dritten Normalform. In der Dritten Normalform kann es vorkommen, daß ein Teil eines (zusammengesetzten) Schlüsselkandidaten funktional abhängig ist von einem Teil eines anderen Schlüsselkandidaten. Die Boyce-Codd-Normalform verhindert dies.

Beispiel:
Der Tabelle "Positionen" wird das Attribut "Kostenartnummer" hinzugefügt. Dieses Attribut ist eindeutig für jede "Kostenart". Dann sind "Rechnungsnummer" und "Kostenart" sowie "Rechnungsnummer" und "Kostenartnummer" zusammengesetzte Schlüsselkandidaten.
 

Positionen
Rechnungsnummer Kostenart Kostenartnummer Anzahl
       

Fettgedruckte Attribute: Primärschlüssel
Kursiv gedruckte Attribute: weiterer Schlüsselkandidat

Die Relation "Positionen" ist in Erster Normalform, da sie keine Wiederholungsgruppe hat und in Zweiter Normalform, da "Anzahl" als einziges Nicht-Schlüsselattribut von beiden Schlüsselkandidaten voll funktional abhängig ist. Sie ist auch in Dritter Normalform, da es außer "Anzahl" keine weiteren Nicht-Schlüsselattribute gibt. Offensichtlich gibt es aber eine funktionale Abhängigkeit von "Kostenart" und "Kostenartnummer", die nichts mit der Rechnungsnummer zu tun hat.

Die Relation ist nicht in Boyce-Codd Normalform. Das Attribut "Kostenartnummer" ist Determinant, da "Kostenart" funktional abhängig von "Kostenartnummer" ist. Der Determinant ist aber nicht Schlüsselkandidat, sondern nur Teil eines Schlüsselkandidaten.

Abhilfe:
Aufteilung der Tabelle "Positionen" in die zwei folgenden Tabellen. Geht man von der ursprünglichen Reisekostendatenbank aus, so würde die Tabelle "Kostenarten" noch das Feld "Einzelvergütung" enthalten.
 

Positionen
Rechnungsnummer Kostenart Anzahl
     

 
Kostenarten
Kostenart Kostenartnummer
   

Beachten Sie:


4.7 Vierte Normalform (4NF)

4.7.1 Definition

Eine Relation ist in Vierter Normalform, wenn sie in Boyce-Codd Normalform ist und für jede mehrwertige Abhängigkeit einer Attributmenge Y von einer Attributmenge X gilt:
- Die mehrwertige Abhängigkeit ist trivial ist oder
- X ist ein Schlüsselkandidat der Relation

4.6.2 Mehrwertige Abhängigkeit (Multivalued Dependency, MVD)

Wir betrachten die folgende Tabelle
 
Personalnummer Haustier
   

Die Personalnummer bestimmt unter Umständen nicht nur ein einziges Haustier, sondern eine ganze Liste verschiedener Haustiere. Hier liegt eine mehrwertige Abhängigkeit (im Gegensatz zur funktionalen Abhängigkeit) vor. Eine mehrwertige Abhängigkeit einer Attributmenge Y von einer Attributmenge X ist trivial, wenn Y Teil von X ist oder die Relation nur aus X und Y besteht. Im Beispiel ist Y=Haustier, X=Personalnummer und die Relation besteht nur aus X und Y. Anschaulich: die mehrwertige Abhängigkeit ist trivial, wenn sich die Tabelle nicht weiter zerlegen läßt.

4.7.3 Erklärung

Probleme mit mehrwertigen Abhängigkeiten gibt es dann, wenn mehrere mehrwertige Abhängigkeiten in einer Tabelle auftreten:
 
Personalnummer Haustier Fahrzeugtyp
     

Zwischen Personalnummer und Haustier sowie zwischen Personalnummer und Fahrzeugtyp gibt es eine mehrwertige Abhängigkeit. Zwischen Haustier und Fahrzeugtyp gibt es keinerlei Abhängigkeit, so daß zu jeder Personalnummer alle Kombinationen dieser beiden Attribute auftauchen können. Die Relation ist in Boyce-Codd-Normalform, da es keine funktionale Abhängigkeit zwischen Attributen gibt. Die Personalnummer alleine ist aber kein Schlüsselkandidat der Relation.

Wie soll aber z. B. in dieser Tabelle eine Personalnummer gespeichert werden, zu der zwei Haustiere und zwei Fahrzeuge gehören? Mögliche Varianten:
 

Personalnummer Haustier Fahrzeugtyp
11112  Hund Porsche
11112 Katze BMW

 
Personalnummer Haustier Fahrzeugtyp
11112 Hund Porsche
11112 Katze Porsche
11112 Hund BMW
11112 Katze BMW

 
Personalnummer Haustier Fahrzeugtyp
11112  Hund  NULL
11112 Katze NULL
11112 NULL Porsche
11112 NULL BMW

NULL repräsentiert einen nicht vorhandenen Wert. Auf den ersten Blick ist die letzte Variante die sinnvollste, da hier klar hervorgeht, das zwischen "Haustier" und "Fahrzeugtyp" keinerlei Abhängigkeit besteht. Die sogenannte Existentielle Integrität verlangt aber, daß kein Schlüsselattribut einen NULL-Wert hat.

Abhilfe:
Aufteilung der Tabelle in zwei Tabellen:
 

Personalnummer Haustier
   

 
Personalnummer Fahrzeugtyp
   

Dann liegen nur noch triviale mehrwertige Abhängigkeiten vor und die Relationen sind in Vierter Normalform.


4.8 Fünfte Normalform (5NF)

4.8.1 Definition

Eine Relation R ist in Fünfter Normalform (oder Project-Join-Normalform), wenn sie in Vierter Normalform ist und für jede Join-Abhängigkeit (R1, R2, ..., Rn) gilt:
- Die Join-Abhängigkeit ist trivial oder
- Jedes Ri aus (R1, R2, ..., Rn) ist Schlüsselkandidat der Relation

Die Fünfte Normalform wird auch als Project Join Normalform (PJNF) bezeichnet.

4.8.2 Join-Abhängigkeit (Join Dependency)

Zum Begriff "Join" siehe Abschnitt 7.2.6. Hier ist der Natural Join gemeint.

Eine Relation R genügt der Join-Abhängigkeit (R1, R2, ..., Rn) genau dann, wenn R gleich dem Join von R1, R2, ..., Rn ist. Die R1, R2, ... sind Teilmengen aller Attribute von R. Eine Join-Abhängigkeit ist trivial, wenn ein Ri aus (R1, R2, ..., Rn) gleich R ist

Beispiel:
 

Personalnummer Haustier Fahrzeugtyp
11112 Hund Porsche
11112 Katze Porsche
11112 Hund BMW
11112 Katze BMW

Da jede Kombination von Haustier und Fahrzeugtyp auftaucht, ist die Relation R=(Personalnummer, Haustier, Fahrzeugtyp) gleich dem Join von R1=(Personalnummer, Haustier) und R2=(Personalnummer, Fahrzeugtyp). Also genügt R der Join-Abhängigkeit (R1, R2).

4.8.3 Erklärung

Beispiel für eine Relation, die nicht in Fünfter Normalform ist:
 
Fach Kurs Name
Mathematik Mathe1 Müller
Physik PhysikA Müller
Mathematik Mathe1 Huber
Mathematik Mathe2 Kelz

Jedes Fach bietet verschiedene Kurse an, die von verschiedenen Teilnehmern besucht werden. Kein Teilnehmer besucht alle Kurse und kein Kurs wird von allen Teilnehmern besucht. Also sind alle drei Attribute wichtig, um die nötige Information darzustellen. Im Gegensatz zum obigen Beispiel bei der vierten Normalform gibt es keine mehrwertigen Abhängigkeiten, da "Kurs" und "Name" nicht unabhängig sind, sondern die Paarungen wichtige Information enthalten.

Die Relation enthält redundante Information, läßt sich aber nicht als Join von R1=(Fach, Kurs) und R2=(Fach, Name) darstellen (es tauchen überflüssige Zeilen auf). Die Relation genügt also nicht der Join-Abhängigkeit (R1, R2). Eine Aufteilung der Tabelle in die zwei Tabellen R1 und R2 ist nicht sinnvoll.
 

R1
Fach Kurs
Mathematik Mathe1
Physik PhysikA
Mathematik Mathe2

 
R2
Fach Name
Mathematik Müller
Physik Müller
Mathematik Huber
Mathematik Kelz

 
JOIN von R1 und R2
Fach Kurs Name
Mathematik Mathe1 Müller
Mathematik Mathe1 Huber
Mathematik Mathe1 Kelz
Physik PhysikA Müller
Mathematik Mathe2 Müller
Mathematik Mathe2 Huber
Mathematik Mathe2 Kelz

Wichtig:
Obwohl wir hier mehr Zeilen haben als vorher, haben wir plötzlich weniger Informationen, da die Information über die wirklichen Kombinationen von "Kurs" und "Name" teilweise verlorengeht.

Interessanterweise genügt die Relation aber zwei anderen Join-Abhängigkeiten, nämlich der trivialen Join-Abhängigkeit R=R1=(Fach, Kurs, Name) sowie der Join-Abhängigkeit R1=(Fach, Kurs), R2=(Fach, Name) und R3=(Kurs, Name). Wie man leicht nachprüft, ist R gleich dem Join von R3 mit dem Join von R1 und R2:
 

R3
Kurs Name
Mathe1 Müller
PhysikA Müller
Mathe1 Huber
Mathe2 Kelz

 
Join von R3 mit
(Join von R1 mit R2)
Fach Kurs Name
Mathematik Mathe1 Müller
Physik PhysikA Müller
Mathematik Mathe1 Huber
Mathematik Mathe2 Kelz

Ist die Relation dann in Fünfter Normalform?
Nein, da weder R1, R2 oder R3 Schlüsselkandidaten sind. Der einzige Schlüsselkandidat besteht aus allen drei Attributen "Fach", "Kurs" und "Name".

Abhilfe:
Aufteilung der Tabelle in die drei folgenden Tabellen (für die es dann nur noch triviale Join-Abhängigkeiten gibt):
 

Fach Kurs
   

 
 
Fach Name
   

 
 
Kurs Name
   

Relationen in Fünfter Normalform lassen sich nicht weiter aufteilen.


  Inhaltsverzeichnis   Kapitel 5
© 1996-98 Andreas Kelz