Die Kriterien eines guten Datenbankentwurfs sind einerseits möglichst geringe Redundanz und andererseits von Einfügen, Lösch- und Änderungsanomalien abhängig. Um Redundanzen und Anomalien zu vermeiden, führen wir den Begriff Normalform ein, der uns hilft unerwünschte Eigenschaften der Datenbank zu vermeiden.
Ein Relationenschema R ist in 1NF wenn der Wertebereich aller Attribute von R atomar sind. D.h. wenn keine mehrwertigen Attribute vorkommen.
Eine Relation befindet sich in der 1. Normalform, wenn
Bei der Transformation einer nicht normalisierten Datenstruktur in die 1. Normalform geht man wie folgt vor:
| CD_ID | Name | Titelliste |
|---|---|---|
| 4711 | All That You Can Leave Behind (U2) | Beautiful Day, Walk On, Kite, Wild Honey |
| 4712 | Tattou You (Rolling Stones) | Start Me Up, Hang Fire, Slave |
→ Das Relationenschema ist nicht in 1. Normalform!
| CD_ID | Album | Interpret | Titelliste |
|---|---|---|---|
| 4711 | All That You Can Leave Behind | U2 | Beautiful Day |
| 4711 | All That You Can Leave Behind | U2 | Walk On |
| 4711 | All That You Can Leave Behind | U2 | Kite |
| 4711 | All That You Can Leave Behind | U2 | Wild Honey |
| 4712 | Tattoo You | Rolling Stones | Start Me Up |
| 4712 | Tattoo You | Rolling Stones | Hang Fire |
| 4712 | Tattoo You | Rolling Stones | Slave |
Ein Relationenschema R ist in zweiter Normalform, wenn es in 1NF ist, und jedes Nicht-Schlüsselfeld vom ganzen Primärschlüssel (der auch aus mehreren Feldern bestehen kann) abhängig ist.
Wichtig ist, dass Datenfelder nicht nur von einem Teilschlüsselfeld, sondern vom gesamten Schlüssel funktional abhängig sind.
Jedes Tupel muss immer vom gesamten Schlüssel abhängen, sonst ist es nicht in 2. Normalform!
Gegeben ist folgende Tabelle:
| CD_ID | Album | Interpret | Track | Titel |
|---|---|---|---|---|
| 4711 | All That You Can Leave Behind | U2 | 1 | Beautiful Day |
| 4711 | All That You Can Leave Behind | U2 | 2 | Walk On |
| 4711 | All That You Can Leave Behind | U2 | 3 | Kite |
| 4712 | Tattoo You | Rolling Stones | 1 | Start Me Up |
| 4712 | Tattoo You | Rolling Stones | 2 | Hang Fire |
z.B.: Durch ein Update des Albums kommt es zu einer Dateninkonsistenz
| CD_ID | Album | Interpret | Track | Titel |
|---|---|---|---|---|
| 4711 | All That You Can Leave Behind | U2 | 1 | Beautiful Day |
| 4711 | All That You Can Leave Behind | U2 | 2 | Walk On |
| 4711 | All That You Can Leave Behind | U2 | 3 | Kite |
| 4712 | Sticky Fingers | Rolling Stones | 1 | Start Me Up |
| 4712 | Tattoo You | Rolling Stones | 2 | Hang Fire |
| CD_ID | Album | Interpret |
|---|---|---|
| 4711 | All That You Can Leave Behind | U2 |
| 4712 | Tattoo You | Rolling Stones |
| CD_ID | Track | Titel |
|---|---|---|
| 4711 | 1 | Beautiful Day |
| 4711 | 2 | Walk On |
| 4711 | 3 | Kite |
| 4712 | 1 | Start Me Up |
| 4712 | 2 | Hang Fire |
| PLZ | Nachname | Ort | Geburtsdatum |
|---|---|---|---|
| 3300 | Muster | Amstetten | 03.05.2003 |
| 3300 | Maier | Amstetten | 05.06.2002 |
| 3304 | Wimmer | St. Georgen | 03.05.2003 |
Problem: Der Ort hängt nicht vom gesamten Schlüssel (PLZ,Nachname) ab, sondern nur von einem Teil des Primärschlüssels (PLZ)!
Ein Relationenschema R ist genau dann in 3NF, wenn es die 1NF und die 2NF erfüllt, und wenn kein nicht primes Attribut von einem Schlüssel in R transitiv abhängt.
Bei der Transformation von der 2. Normalform in die 3. Normalform geht man wie folgt vor:
Transitivitätsregel K→X, X→A : K→A
Gegeben sei eine Tabelle mit folgenden Feldern:
| _CD_ID_ | Album | Interpret | Band-Gründungsjahr |
|---|---|---|---|
| 4711 | All That You Can Leave Behind | U2 | 1976 |
| 4712 | Sticky Fingers | Rolling Stones | 1962 |
| 4713 | Tattou You | Rolling Stones | 1962 |
Offensichtlich lässt sich der Interpret einer CD aus der CD_ID bestimmen. Das Band-Gründungsjahr der Band hängt dagegen vom Interpret und damit nur !!transitiv!! von der CD_ID ab.
Auch hier besteht eine Datenredundanz, wodurch Inkonsistenzen beim Ändern auftreten können.
| _CD_ID_ | Album | Interpret | Band-Gründungsjahr |
|---|---|---|---|
| 4711 | All That You Can Leave Behind | U2 | 1976 |
| 4712 | Sticky Fingers | Rolling Stones | 1972 |
| 4713 | Tattou You | Rolling Stones | 1962 |
| _CD_ID_ | Album | Interpret |
|---|---|---|
| 4711 | All That You Can Leave Behind | U2 |
| 4712 | Sticky Fingers | Rolling Stones |
| 4713 | Tattou You | Rolling Stones |
| _Interpret_ | Band-Gründungsjahr |
|---|---|
| U2 | 1976 |
| Rolling Stones | 1962 |
| _ID_ | PLZ | Nachname | Ort | Geburtsdatum |
|---|---|---|---|---|
| 1 | 3300 | Muster | Amstetten | 03.05.2003 |
| 2 | 3300 | Maier | Amstetten | 05.06.2002 |
| 3 | 3304 | Wimmer | St. Georgen | 03.05.2003 |
Problem: Der Ort ist eigentlich von der PLZ abhängig
Zwei Tabellen:
| PLZ | Ort |
|---|---|
| 3300 | Amstetten |
| 3304 | St. Georgen |
| _ID_ | PLZ | Nachname | Geburtsdatum |
|---|---|---|---|
| 1 | 3300 | Muster | 03.05.2003 |
| 2 | 3300 | Maier | 05.06.2002 |
| 3 | 3304 | Wimmer | 03.05.2003 |