Normalformen in relationalen Datenbanken (Normalformen in relationalen Datenbanken), Lektion, Seite 722528
https://www.purl.org/stefan_ram/pub/normalformen_rdbms (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

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 Anzahl

1 Smith 1 300
1 Smith 2 200
1 Smith 3 400
2 Jones 1 300
2 Jones 2 400

S 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 Text

1 Smith
1 Smith
1 Smith
2 Jones
2 Jones

S

Verfuerbarkeit
Lieferant Artikel Stueck
Kennzahl Kennzahl Anzahl

1 1 300
1 2 200
1 3 400
2 1 300
2 2 400

S 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.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722528 stefan_ram:722528 Normalformen in relationalen Datenbanken Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722528, slrprddef722528, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/normalformen_rdbms