Normalisierung?
(von © 1996-98 Andreas Kelz )
Ü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.
Komplexe Tabellen sollen durch eine Aufteilung in mehrere Tabellen entflechtet werden.
So das dabei stabile und flexible Strukturen entstehen und keine Anomaliene
mehr auftreten (siehe vorher)
Die Normalisierung erfolgt in mehreren Schritten:
- Nullte Normalform
- Erster Normalform (1NF)
- Zweite Normalform (2NF)
- Dritte Normalform (3NF)
- Boyce-Codd Normalform (BCNF)
- Vierte Normalform (4NF)
- Fünfte Normalform (5NF)
Relevant für uns sind nur die ersten vier (bis zur 3NF)
Was benötigen wir zum
Normalisieren?
Schlüssel
-
Ein Schlüssel ist eine
Menge von Attributen (also eines oder mehrere), die eine Datenzeile (Tupel)
einer Tabelle eindeutig identifiziert
-
Ein Schlüsselkandidat ist
ein Schlüssel mit minimaler Anzahl Attribute
-
Eine Relation kann mehrere Schlüsselkandidaten haben
-
Ein Primärschlüssel ist
ein beliebig ausgewählter Schlüsselkandidat, der zur eindeutigen
Identifizierung jeder Zeile benutzt wird. Besteht der Primärschlüssel
aus mehreren Attributen (dies ist dann der Fall, wenn ein Attribut zur
eindeutigen Identifizierung nicht ausreicht), wird er als zusammengsetzter Primärschlüssel bezeichnet.
-
Ein Schlüsselattribut ist ein Attribut, das Teil mindestens
eines Schlüsselkandidaten ist. Alle anderen Attribute sind Nicht-Schlüsselattribute
Nullte Normalform
Die Datenelemente der realen Welt werden als Tabelle aufgelistet
und berechnete Datenfelder möglichst entfernt.
Erste Normalform (1NF)
Definition
Eine Relation ist in der Ersten
Normalform, wenn jeder Attributwert atomar ist.
Erklärung
Ein
Attributwert ist atomar, wenn er nicht aus mehreren Werten zusammengsetzt ist.
So wäre z. B. der Attributwert ausgeliehen an:(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.
Zweite Normalform (2NF)
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.
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:
- Besteht der Primärschlüssel nur aus einem einzigen
Attribut (ist er also nicht zusammengesetzt), so ist ein Datensatz in Erster
Normalform bereits automatisch in Zweiter Normalform.
weiters Beispiel:
Neben der AuftragNr, der ArtikelNr und der Menge soll auch der Hersteller
des Artikels gespeichert werden. Damit würde sich die folgende Artikel-Tabelle
ergeben.
AuftragNr und ArtikelNr sind der zusammengesetzte Primärschlüssel.
best. Artikel |
AuftragNr |
ArtikelNr |
Menge |
Hersteller |
4711 |
4692 |
5 |
Blech-AG |
4711 |
0567 |
2 |
Keramik GmbH |
4711 |
5671 |
3 |
Baustoff KG |
4711 |
0579 |
1 |
Keramik GmbH |
0815 |
8971 |
2 |
Keramik GmbH |
0815 |
5324 |
5 |
Baustoff KG |
0815 |
0579 |
9 |
Keramik GmbH |
In diesem Beispiel ist das Attribut `Hersteller` nur vom Teilschlüssel `ArtikelNr`
und nicht auch von `AuftragNr` abghängig. Damit die Relation der 2. NF genügt,
muß das Attribut `Hersteller` aus der Relation herausgenommen und der (neuen)
Relation Artikel zugeordnet werden.
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.
|