Normalformen in Relationalen Datenbanken
Normalformen
Die Normalformen geben lediglich das formal wieder, was einem der gesunde Menschenverstand ohnehin schon sagt, wenn man sich von dem Prinzip leiten läßt, daß Informationen nicht mehrfach abgespeichert werden sollen.
Wenn eine Datenbank aus Tabellen für Entitäten und für n:m-Relationen besteht, dann erfüllt sie oft automatisch alle Normalformen. Man muß sich dann schon extra Mühe geben, um eine Normalform zu verletzen.
Da die zweite und dritte Normalformen aus der Boyce/Codd-Normalform folgen, behandeln wir sie hier nicht extra. Man kann die zweite und dritte Normalform als historisch interessante Versuche auf dem Weg zu einer nützlichen Definition ansehen, die Boyce/Codd-Normalform ist praktisch die Korrektur eines Fehlers bei der Definition der dritten Normalform.
Weil die höheren Normalformen (ab der vierten) seltener benötigt werden, ist die Boyce/Codd-Normalform in der Praxis somit die wichtigste Normalform. Die sechste Normalform ist praktisch die maximale Zerlegung einer Tabelle in Faktoren, welche in der Praxis nicht unbedingt vorteilhaft ist. Die fünfte Normalform ist aber tatsächlich ein erstrebenswertes Ziel, es ist aber nicht immer einfach Verletzungen zu erkennen. Eine Tabelle in der Boyce/Codd-Normalform ist oft auch in der fünften Normalform, aber die Boyce/Codd-Normalform ist einfacher anzuwenden. Daher ist die Boyce/Codd-Normalform die wichtigste Normalform.
Die Boyce/Codd-Normalform (BCNF)
Abhängigkeiten
Aufgrund des Wissens um die beschriebenen Entitäten kann man manchmal schließen, daß eine bestimmte Menge von Spalten eine andere Menge bereits vollständig und eindeutig bestimmt, in dem Sinne, das jemand, der die Werte der ersten Menge kennt, durch Recherchen prinzipiell die Werte der zweiten Menge ermitteln könnte. Beispielsweise bestimmt die Art eines Lebewesen (Löwe, Buche) eindeutig sein Reich (Tier, Pflanze). Wir sagen dann, daß die andere Menge von der ersten abhängig sei. (Diese Abhängigkeit kann nicht durch Lesen einer bestimmten Tabelle erkannt werden, sondern nur durch das Wissen um ihre Bedeutung.)
Das Reich eines Lebewesen hängte beispielsweise von seiner Art ab.
Art Reich
Loewe ----> Tier
Buche Pflanze
Spaltenmengen
In dieser Lektion werden Abhängigkeiten meist unter Bezug auf Spaltenmenge beschrieben. Wenn die Art eines Lebewesens sein Reich bestimmt, und das Art und das Reich jeweils durch eine Spalte namens Art beziehungsweise Reich beschrieben wird, dann sagen wir auch, daß die Spaltenmenge {Reich} von der Spaltenmenge {Art} abhängt.
{Art}→{Reich}
Eine Spaltenmenge kann man sich vorstellen wie eine Aufzählung von Spalten, bei welcher die Reihenfolge aber keine Bedeutung hat. Diese Aufzählung erfolgt durch kommagetrennte Auflistung der Namen der Spalten in geschweiften Klammern.
Triviale Abhängigkeiten
Trivialerweise ist jede Teilmenge einer Spaltenmenge von dieser Spaltenmenge abhängig, beispielsweise bestimmt die Spaltenmenge (Name, Rufnummer) die Teilmenge (Rufnummer). Solch eine Abhängigkeit nennen wir triviale Abhängigkeit.
- Triviale Abhängigkeit
Art Art
Loewe ----> Loewe
Buche Buche
{Art}→{Art}
- Triviale Abhängigkeit
Name Rufnummer Rufnummer
Hans 12345678 ----> 12345678
Lotte 98765432 98765432
{Name, Rufnummer}→{Rufnummer}
- Nichttriviale Abhängigkeiten (Olympische Spiele)
Jahr Austragungsort
1948 London
1952 ----> Helsinki
1956 Stockholm
1960 Rom
{Jahr}→{Austragungsort}
- Nichttriviale Abhängigkeiten (Olympische Spiele)
Jahr Jahr Austragungsort
1948 1948 London
1952 ----> 1952 Helsinki
1956 1956 Stockholm
1960 1952 Rom
{Jahr}→{Jahr,Austragungsort}
Determinierer
- Tabelle
Art
Loewe
Buche
{Art}→{Art}
Die linke Seite einer nichttrivialen Abhängigkeit nennen wir einen Determinierer.
Die folgende Tabelle hat beispielsweise einen Determinierer, nämlich {Jahr}.
- Tabelle
Jahr Austragungsort
1948 London
1952 Helsinki
1956 Stockholm
1960 Rom
{Jahr}→{Austragungsort}
Schlüssel
Ein Schlüssel (einer Tabellenvariablen) ist hier eine Spaltenmenge, von der alle Spalten einer Tabellenvariablen abhängen.
- Nichttriviale Abhängigkeiten (Olympische Spiele)
Jahr Austragungsort
1948 London
1952 Helsinki
1956 Stockholm
1960 Rom
{Jahr}→{Jahr,Austragungsort}
{Jahr,Austragungsort}→{Jahr,Austragungsort}
Ein Schlüssel der voranstehenden Tabelle ist {Jahr}, ein anderer Schlüssel ist {Jahr, Austragungsort}.
Gegenbeispiel: Der Austragungsort ist kein Schlüssel, da er eine Zeile möglicherweise nicht eindeutig bestimmt (sobald die Olympischen Spiele zweimal an einem Ort stattfinden), auch wenn dies bei den vier bisher eingetragenen Werten so ist.
Keiner der in dieser Lektion vorgestellten Schlüsselbegriffe ist mit dem Begriff „Primärschlüssel“ oder mit einem Index zu Beschleunigung des Zugriffs auf eine Tabelle zu verwechseln! Der Primärschlüssel oder Indizes zur Effizienzsteigerung spielen bei der Normalisierung keine Rolle.
Die Boyce/Codd-Normalform (BCNF)
Die Boyce/Codd-Normalform verlangt:
Jeder Determinierer ist Schlüssel.
Mit dieser Forderung soll insbesondere ausgeschlossen werden, daß Werte von Teilen eines Schlüssels abhängen, die selber kein Schlüssel sind.
Verletzung der Boyce/Codd-Normalform
Die Boyce/Codd-Normalform ist verletzt genau dann wenn gilt:
Es gibt einen Determinierer, der kein Schlüssel ist.
Es darf also keine echte Teilmenge aller Spalten geben, die von einem Nichtschlüssel abhängt.
Eine Tabelle ist dann in der Boyce/Codd-Normalform, wenn die Boyce/Codd-Normalform nicht verletzt ist.
Beispiel zur Verletzung der Boyce/Codd-Normalform
Das folgende Beispiel zeigt eine Tabelle, welche die Boyce/Codd-Normalform verletzt.
Die Tabelle »Verfuegbarkeit« gibt an, welcher Lieferant wieviel Stück von welchem Artikel liefern kann. Dabei ist der Lieferant durch seine Kennzahl und seinen Namen gegeben, der Artikel durch seine Kennzahl und die lieferbaren Stücke durch ihre Anzahl.
Diese Tabelle hat unter anderem die beiden Schlüssel S mit S ={ Lieferant, Artikel } und T mit T={ Name, Artikel }.
Der Name des Lieferanten hängt von der Kennzahl des Lieferanten ab, aber diese Kennzahl ist kein Schlüssel der Tabelle.
Die Kennzahl des Lieferanten ist also ein Determinierer, der kein Schlüssel ist. Wir haben also einen Subdeterminierer gefunden. Damit ist die Boyce/Codd-Normalform verletzt!
Verfuerbarkeit
Lieferant Name Artikel Stueck
Kennzahl Text Kennzahl Anzahl1 Smith 1 300
1 Smith 2 200
1 Smith 3 400
2 Jones 1 300
2 Jones 2 400S S
T T
Um diese Abhängigkeit einer Teilmenge aller Spalten von einem Nichtschlüssel aufzuheben, muß die Tabelle in zwei Tabellen zerlegt werden.
Lieferant
Lieferant Name
Kennzahl Text1 Smith
1 Smith
1 Smith
2 Jones
2 JonesS
Verfuerbarkeit
Lieferant Artikel Stueck
Kennzahl Kennzahl Anzahl1 1 300
1 2 200
1 3 400
2 1 300
2 2 400S S
Nun hängen alle Werte beider Tabellen nur von Schlüsseln der Tabellen ab. In keiner der beiden Tabellen kann man einen Subdeterminierer finden.
Die dritte Normalform (3NF)
BCNF: Jeder Determinierer muß ein Schlüssel sein.
3NF: Jeder Determinierer einer Nichtschlüsselspalte muß ein Schlüssel sein.
Jede Tabelle in BCNF ist auch in 3NF.
Eine Tabelle kann in 3NF sein, aber nicht in BCNF, wenn es überlappende Schlüssel gibt.
Die zweite Normalform (2NF)
Falls ein Schlüssel keine echte Teilmengen enthält, welche ebenfalls ein Schlüssel ist, so nennen wir ihn einen Minimalschlüssel.
Die zweite Normalform lautet dann:
- Jedes Nichtschlüsselattribut ist von jedem Minimalschlüssel ganz abhängig (nicht nur von einem Teil).
Daraus folgt sofort:
- Falls eine Tabelle keine Minimalschlüssel aus mehreren Spalten hat, dann ist sie in 2NF.
Die fünfte Normalform (5NF)
Ohne hier die fünfte Normalform genau zu definieren, können wir doch angeben:
- Falls eine Tabelle keine Schlüssel aus mehreren Spalten hat und in BCNF ist, dann ist sie auch in 5NF.
Hinweise zur Terminologie
Was hier „Tabelle“ genannt wurde, wird in anderen Quellen auch manchmal „Tabellenvariable“ genannt.
Was hier „Schlüssel“ genannt wurde, wird in anderen Quellen auch manchmal „Superschlüssel“ genannt.
Was hier „Minimalschlüssel“ genannt wurde, wird in anderen Quellen oft „Schlüsselkandidat“ genannt.
Auch der Begriff „Determinierer“ wird manchmal anders definiert als hier, manchmal wird ein Determinierer „Determinante“ genannt.