Wird eine Tabelle "normalisiert", so ändert man ihre "Form". Eventuell wird der Inhalt
auf mehrere Tabellen verteilt, ein Attribut wird in eine andere Tabelle verschoben...
Durch das überführen von Tabellen in eine Normalform kommt man den Zielen
des Datenbank Designs näher (Vermeidung von Redundanz, einfache Wartbarkeit..)
Man unterscheidet 1. Normalform, 2. Normalform, 3. Normalform, 4. Normalform 5. Normalform.
Wir gehen auf die erste, zweite und dritte Normalform ein, da die vierte und fünfte
Normalform keine grosse Bedeutung im praktischen Umgang mit DBS besitzen (was für
Theoretiker und Akademiker).
Die Normalform leitet sich vom
Relationenmodell
ab, auf dem SQL aufbaut.
| Definition: |
Ein
Relation
ist in der 1. Normalform,
wenn alle
Attribute
maximal einen Wert besitzen.
Das Nichtvorhandensein von Daten ist zulässig.
|
Ein Beispiel - Name der Relation:
DienstNummer (nicht in 1.Normalform)
| Dienstnummer |
Name |
Auszeichnung |
DatumAusz |
| 1 |
Captain Kirk |
Auszeichnung A |
26.03.2056 |
|
|
Auszeichnung B |
22.07.2057 |
|
|
Auszeichnung C |
05.02.2058 |
| 4 |
Mr.Spock |
Auszeichnung M1 |
09.08.2052 |
|
|
Auszeichnung M2 |
14.02.2054 |
Hier besitzen die Attribute "
Auszeichung" und
"
DatumAusz" mehrere Werte. Es kommt zu sogenannten
Wiederholungsgruppen, die in der 1. Normalform nicht
zulässig sind.
Um diese Relation in die 1. Normalform zu bringen, müssen die Attribute
"
Auszeichung" und "
DatumAusz" in eine
neue Relation verschoben werden.
Ergebnis: Relationen befinden sich bereits in 1. Normalform
Name der Relation: DienstNummer
| DienstNummer |
Name |
| 1 |
Captain Kirk |
| 4 |
Mr.Spock |
|
|
Name der Relation: Auszeichnung
| Auszeichnung |
DatumAusz |
| Auszeichnung A |
26.03.2056 |
| Auszeichnung B |
22.07.2057 |
| Auszeichnung C |
05.02.2058 |
| Auszeichnung M1 |
09.08.2052 |
| Auszeichnung M2 |
14.02.2054 |
|
Jedoch ist die Zuordnung verloren gegangen, wem welche Auszeichnung gehört. Um dies
Problem zu lösen wählen man als
Primär Schlüssel
das Attribut
DienstNummer und fügen es der Relation Auszeichnung hinzu.
Ergebnis nach Normalisierung. Relationen befinden sich in 1. Normalform
Name der Relation: DienstNummer
| DienstNummer |
Name |
| 1 |
Captain Kirk |
| 4 |
Mr.Spock |
|
|
Name der Relation: Auszeichnung
| DienstNummer |
Auszeichnung |
DatumAusz |
| 1 |
Auszeichnung A |
26.03.2056 |
| 1 |
Auszeichnung B |
22.07.2057 |
| 1 |
Auszeichnung C |
05.02.2058 |
| 4 |
Auszeichnung M1 |
09.08.2052 |
| 4 |
Auszeichnung M2 |
14.02.2054 |
|
Die 1. Normalform schliesst
Redundanz
nicht aus!
Besitzt eine Relation in der 1. Normalform einen
einfachen Primärschlüssel
ist sie automatisch in der 2. Normalform.
Betrachten wir die Tabelle
shuttle in der gespeichert wird, wer sich ein
Shuttle ausgeliehen hat.
| Zeit |
Datum |
ShuttleNr |
Farbe |
Person |
| 18.56 |
05.03.2058 |
4 |
Grün |
Captain Kirk |
| 19.08 |
06.03.2058 |
4 |
Grün |
Mr. Spock |
| 18.56 |
05.03.2058 |
5 |
Silber |
Mr. Spock |
Der
Primär Schlüssel
besteht aus den Attributen
Zeit, Datum, ShuttleNr (da es mehrere Shuttles gibt, können
sich zur gleichen Zeit mehrer Personen Shuttles ausleihen, wir brauchen somit Zeit, Datum und
ShuttleNummer um festzustellen, wer das Shuttle geflogen hat).
Das Attribut
Farbe hängt offensichtlich nur
vom Attribut
ShuttleNr ab. Somit befindet sich die Relation
shuttle
nicht in der 2. Normalform.
Um die Relation in die 2. Normalform zu bringen, wird sie auf 2 Relationen aufgeteilt.
Der Teilschlüssel von dem Attribut
Farbe abhängt,
wird Primärschlüssel
der neu angelegten Relation.
Ergebnis: Relationen befinden sich in 2. Normalform
Name der Relation: shuttle
| Zeit |
Datum |
ShuttleNr |
Person |
| 18.56 |
05.03.2058 |
4 |
Captain Kirk |
| 19.08 |
06.03.2058 |
4 |
Mr. Spock |
| 18.56 |
05.03.2058 |
4 |
Mr. Spock |
|
|
Name der Relation: farbe
| ShuttleNr |
Farbe |
| 4 |
Grün |
| 5 |
Silber |
|
Attribut B ist von Attribute A funktional abhängig, wenn für den gleichen Wert von
A immer der gleich Wert für B auftritt.
Relation
einsatz hat einen
einfachen Primärschlüssel
(EinsatzNr) und ist somit in der 2. Normalform.
Name der Relation:
einsatz
| EinsatzNr |
RaumschiffNr |
RaumschiffName |
| 1 |
NCC-1701 |
U.S.S. Enterprise |
| 2 |
NCC-1974 |
U.S.S. Constellation |
| 3 |
NCC-1701 |
U.S.S. Enterprise |
| 4 |
NCC-2893 |
U.S.S. Stargazer |
Es besteht offensichtlich eine funktionale Abhängigkeit zwischen den Attributen
RaumschiffNr und
RaumschiffName.
Nach
NCC-1701 folgt im Attribut
RaumschiffName immer der Wert
U.S.S. Enterprise.
Um die 3. Normalform zu erreichen wird Tabelle
einsatz auf 2 Tabellen verteilt.
Ergebnis: Relationen befinden sich in 3. Normalform
Name der Relation: einsatz
| EinsatzNr |
RaumschiffNr |
| 1 |
NCC-1701 |
| 2 |
NCC-1974 |
| 3 |
NCC-1701 |
| 4 |
NCC-2893 |
|
|
Name der Relation: raumschiff
| RaumschiffNr |
RaumschiffName |
| NCC-1701 |
U.S.S. Enterprise |
| NCC-1974 |
U.S.S. Constellation |
| NCC-2893 |
U.S.S. Stargazer |
|