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.
Beispiel - CD Lieder
| _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 |
Fehler/Problem
Zur Sortierung nach Interpret muss das Feld Name in Album und Interpret aufgeteilt werden
Den Titel können (mit einfachen Mitteln) nur alle gleichzeitig als Titelliste oder gar nicht dargestellt werden
Lösung 1NF
| _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 | Tattou You | Rolling Stones | Start Me Up |
| 4712 | Tattou You | Rolling Stones | Hang Fire |
| 4712 | Tattou You | Rolling Stones | Slave |
Ein Attribut heißt Prim in einer Relation, wenn es mindestens in einem Schlüssel von R enthalten ist bzw. nicht prim, wenn es in keinem Schlüssel enthalten ist.
Ein Relationenschema R ist in zweiter Normalform, wenn es in 1NF und jedes nicht prime Attribut voll funktional von jedem Schlüssel von R abhängig ist, d.h. nur vom ganzen Schlüssel und nicht nur von einem Teil abhängig ist.
Beispiel
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 | Tattou You | Rolling Stones | 1 | Start Me Up |
| 4712 | Tattou You | Rolling Stones | 2 | Hang Fire |
Problem
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 | Tattou You | Rolling Stones | 2 | Hang Fire |
Lösung 2NF
| _CD_ID_ | Album | Interpret |
| 4711 | All That You Can Leave Behind | U2 |
| 4712 | Tattou You | Rolling Stones |
| _CD_ID_ | _Track_ | Titel |
| 4711 | 1 | All That You Can Leave Behind |
| 4711 | 2 | Walk On |
| 4711 | 3 | Kite |
| 4712 | 1 | Start Me Up |
| 4712 | 2 | Hang Fire |
Ein Relationenschema R ist in 1NF ist genau dann in 3NF, wenn kein nicht primes Attribut von einem Schlüssel in R transitiv abhängt.
Transitivitätsregel K→X, X→A : K→A
Beispiel
Gegeben sei eine Tabelle mit folgenden Feldern:
| _CD_ID_ | Album | Interpret | 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 Gründungsjahr der Band hängt dagegen vom Interpret und damit nur !!transitiv!! von der CD_ID ab.
Problem
Auch hier besteht eine Datenredundanz, wodurch Inkonsistenzen beim Ändern auftreten können.
| _CD_ID_ | Album | Interpret | Gründungsjahr |
| 4711 | All That You Can Leave Behind | U2 | 1976 |
| 4712 | Sticky Fingers | Rolling Stones | 1972 |
| 4713 | Tattou You | Rolling Stones | 1962 |
Lösung
| _CD_ID_ | Album | Interpret |
| 4711 | All That You Can Leave Behind | U2 |
| 4712 | Sticky Fingers | Rolling Stones |
| 4713 | Tattou You | Rolling Stones |
| _Interpret_ | Gründungsjahr |
| U2 | 1976 |
| Rolling Stones | 1962 |