====== 2.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-192422.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|