====== 9.6) Normalformen ======
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.
===== 1. Normalform (1NF) =====
**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|
* Das Feld **Name** beinhaltet Album und Interpret
* Das Feld **Titelliste** enthält eine Aufzählung aller Titel
=== 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|
===== 2. Normalform (2NF) =====
**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.**
{{:inf:inf8bi_201819:2:pasted:20181113-192339.png}}
==== 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|
===== 3. Normalform (3NF) =====
**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**
{{:inf:inf8bi_201819:2:pasted:20181113-192429.png}}
==== 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|