Datenbanken 6: Normalisierung 26. IV. 2016
Outline 1 Organisatorisches 2 SQL 3 Überblick Datenbankdesign 4 Normalisierung Erste Normalform Zweite Normalform Dritte Normalform Boyce-Codd Normal Form Vierte Normalform
Organisatorisches In zwei Wochen, am 10. Mai findet der zweite Zwischentest statt. Aufsicht übernimmt Martin Antenreiter. VO entfällt an diesem Tag. Fragestunde bereits nächste Woche
SQL Nachbesprechung Zwischentest korrelierte Subqueries
Nachbesprechung Zwischentest LIKE vs. = COUNT vs. SUM Subquery statt WHERE HAVING statt WHERE DISTINCT für Abgabesystem
Datenbankdesign bisher: zeichne Entitäten, Relationen, und Attribute in ein ER-Diagramm leite aus dem ER-Diagramm ein Datenbankschema ab Nun beschäftigen wir uns mit einem verfeinerten Zugang ( Normalisierung ). Die Grundlage dafür ist der Begriff der funktionalen Abhängigkeit.
Funktionale Abhängigkeit Zur Erinnerung: Definition (funktionale Abhängigkeit) Gegeben sei ein abstraktes relationales Datenbankschema R sowie (Mengen von) Attribute(n) α, β in R. Wir sagen, dass β funktional abhängig von α ist (α β), wenn für alle Realisierungen R of R: Immer wenn zwei Tupel (Zeilen) dieselben Werte für α haben, so haben sie auch gleiche Werte für β. Achtung: Für unsere Belange ist nur diese Art von Abhängigkeit relevant. Andere Formen von Abhängigkeit (z.b. Korrelation) spielen keine Rolle und dürfen nicht mit funktionaler Abhängigkeit verwechselt werden!
Normalisierung: Ausblick Wir kennen inzwischen: funktionale Abhängigkeiten (FDs) Eigenschaften guter Zerlegungen (Verlustlosigkeit, Abhängigkeitserhaltung)
Normalisierung: Ausblick Wir kennen inzwischen: funktionale Abhängigkeiten (FDs) Eigenschaften guter Zerlegungen (Verlustlosigkeit, Abhängigkeitserhaltung) Wir hätten gerne: guten Weg, um eine gegebene Relation R in kleinere Relationen zu zerlegen
Normalisierung: Ausblick Wir kennen inzwischen: funktionale Abhängigkeiten (FDs) Eigenschaften guter Zerlegungen (Verlustlosigkeit, Abhängigkeitserhaltung) Wir hätten gerne: guten Weg, um eine gegebene Relation R in kleinere Relationen zu zerlegen Wir machen dies über: Schritt-für-Schritt Normalisierung Mit jedem Schritt erreichen wir eine höhere Normalisierungsstufe (1 bis 4).
Normalisierung: Ausblick Wir hätten gerne: guten Weg, um eine gegebene Relation R in kleinere Relationen zu zerlegen Wir machen dies über: Schritt-für-Schritt Normalisierung Mit jedem Schritt erreichen wir eine höhere Normalisierungsstufe (1 bis 4). Normalisierung erreicht: verlustlose Zerlegung manchmal auch abhängigkeitserhaltende Zerlegung In den entstehenden Relationen gibt es nur mehr interessante FDs zwischen Schlüssel- und Nichtschlüsselattributen.
Normalisierung Alternatives Material zu Normalisierung: Kapitel 2 von Andreas Meier: Relationale und postrelationale Datenbanken, Springer (innerhalb der MUL frei als pdf zum Download)
Erste Normalform Outline 1 Organisatorisches 2 SQL 3 Überblick Datenbankdesign 4 Normalisierung Erste Normalform Zweite Normalform Dritte Normalform Boyce-Codd Normal Form Vierte Normalform
Erste Normalform Erste Normalform Definition (1NF) Eine Relation ist in 1NF, wenn alle Attribute atomar sind. Diese Voraussetzung haben wir bereits gemacht. Beispiel einer Tabelle/Relation, die nicht in 1NF: Vater Mutter Kinder Karl Maria {Fritz, Franziska} Ronald Elisabeth {Hannes, Kathrin} Andreas Marianne {Sophia}
Erste Normalform Erste Normalform Beispiel Beispiel einer Tabelle/Relation, die nicht in 1NF: Vater Mutter Kinder Karl Maria {Fritz, Franziska} Ronald Elisabeth {Hannes, Kathrin} Andreas Marianne {Sophia} kann leicht in 1NF konvertiert werden: Vater Mutter Kind Karl Maria Fritz Karl Maria Franziska Ronald Elisabeth Hannes Ronald Elisabeth Kathrin Andreas Marianne Sophia
Zweite Normalform Outline 1 Organisatorisches 2 SQL 3 Überblick Datenbankdesign 4 Normalisierung Erste Normalform Zweite Normalform Dritte Normalform Boyce-Codd Normal Form Vierte Normalform
Zweite Normalform Zweite Normalform Definition (2NF) Eine Relation ist in 2NF, wenn sie in 1NF ist und jedes Nichtschlüsselattribut voll funktional abhängig von jedem Kandidatenschlüssel ist. (Zur Erinnerung: β ist voll funktional abhängig von α, wenn α β mit α minimal.) Intuition: Jedes Attribut im Schlüssel ist wichtig.
Zweite Normalform Zweite Normalform Beispiel Betrachten folgende Tabelle mit Studenteninformationen: (Annahme: nur ein Studium pro Student) Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Wie sieht Schlüssel in dieser Tabelle aus? D.h. welche Werte müssen festgelegt werden, um eine Zeile eindeutig zu identifizieren?
Zweite Normalform Zweite Normalform Beispiel Betrachten folgende Tabelle mit Studenteninformationen: (Annahme: nur ein Studium pro Student) Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Wie sieht Schlüssel in dieser Tabelle aus? D.h. welche Werte müssen festgelegt werden, um eine Zeile eindeutig zu identifizieren? Legt man Matrikelnummer, Lehrveranstaltungsnummer sowie Datum fest, kann es zu den gegebenen Werten nur eine Zeile in der Tabelle geben. {MNr,LvaNr,Datum} bildet (Super-)Schlüssel der Tabelle.
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: Nname: Stkz: Studium: Lva: Note:
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: Stkz: Studium: Lva: Note:
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: MNr Stkz: Studium: Lva: Note:
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: MNr Stkz: MNr Studium: Lva: Note:
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: MNr Stkz: MNr Studium: MNr Lva: Note:
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: MNr Stkz: MNr Studium: MNr Lva: LvaNr Note:
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: MNr Stkz: MNr Studium: MNr Lva: LvaNr Note: MNr, LvaNr, Datum
Zweite Normalform Zweite Normalform Beispiel Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Listen für jedes Nichtschlüsselattribut jene Schlüsselattribute auf, von denen es voll funktional abhängt: Vname: MNr Nname: MNr Stkz: MNr Studium: MNr Lva: LvaNr Note: MNr, LvaNr, Datum Diese Tabelle ist nicht in 2NF!
Zweite Normalform Zweite Normalform Beispiel bekommen 2NF, indem Attribute, die von derselben Menge von Schlüsselattributen abhängen, in einer Tabelle zusammengefasst werden: MNr Vname Nname Stkz Studium LvaNr Lva MNr LvaNr Datum Note Falls es kein Nichtschlüsselattribut gibt, das vom gesamten Schlüssel abhängt, gibt es eine zusätzliche Tabelle, die nur die Schlüsselwerte enthält!
Dritte Normalform Outline 1 Organisatorisches 2 SQL 3 Überblick Datenbankdesign 4 Normalisierung Erste Normalform Zweite Normalform Dritte Normalform Boyce-Codd Normal Form Vierte Normalform
Dritte Normalform Dritte Normalform Definition (3NF) Eine Relation ist in 3NF, wenn sie in 1NF ist und für jede FD α β mindestens eine der folgenden Bedingungen gilt: 1 β α, d.h. die FD α β ist trivial, 2 β ist in einem Kandidatenschlüssel enthalten, 3 α ist ein Superschlüssel. Insbesondere ist eine Relation nicht in 3NF, wenn es FDs zwischen Attributen gibt, die nicht Teil eines (Kandidaten-/Super-)Schlüssels sind. Intuition: wollen keine FDs zwischen Nichtschlüsselattributen
Dritte Normalform Dritte Normalform Beispiel Beispiel. MNr Vname Nname Stkz Studium LvaNr Lva MNr LvaNr Datum Note
Dritte Normalform Dritte Normalform Beispiel Beispiel. MNr Vname Nname Stkz Studium LvaNr Lva MNr LvaNr Datum Note Die FD Stkz Studium erfüllt keine der Bedingungen zur 3NF..
Dritte Normalform Dritte Normalform Beispiel Beispiel. Zerlegung, die 3NF erfüllt: MNr Vname Nname Stkz Stkz Studium LvaNr Lva MNr LvaNr Datum Note
Dritte Normalform Synthesealgorithmus für 3NF Gegeben: Relation R, Menge F von FDs Wir wollen: verlustlose und abhängigkeitserhaltende Zerlegung R 1,..., R n, sodass jedes R i in 3NF ist Algorithmus: 1 Bestimme kanonische Überdeckung F c von F (siehe Unit 5). 2 Lege für jede FD α β in F c eine Relation R α := α β an (und bestimme entsprechende Menge von FDs F α ). 3 Wenn eine der Relationen R α einen Kandidatenschlüssel von R enthält, sind wir fertig. Ansonsten lege weitere Relation R κ für einen Kandidatenschlüssel κ von R an (mit F κ = ). 4 Lösche Relationen R α, die in anderen Relationen R α enthalten sind, d.h. R α R α.
Dritte Normalform Synthesealgorithmus Beispiel Betrachten folgende Tabelle mit Studenteninformationen: (Annahme: nur ein Studium pro Student) Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Funktionale Abhängigkeiten: MNr Vname, Nname, Stkz, Studium Stkz Studium LvaNr Lva MNr, LvaNr, Datum Note
Dritte Normalform Synthesealgorithmus Beispiel Betrachten folgende Tabelle mit Studenteninformationen: (Annahme: nur ein Studium pro Student) Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Kanonische funktionale Abhängigkeiten: MNr Vname, Nname, Stkz Stkz Studium LvaNr Lva MNr, LvaNr, Datum Note
Dritte Normalform Synthesealgorithmus Beispiel Betrachten folgende Tabelle mit Studenteninformationen: (Annahme: nur ein Studium pro Student) Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Tabellen: MNr, Vname, Nname, Stkz Stkz, Studium LvaNr, Lva MNr, LvaNr, Datum, Note
Dritte Normalform Synthesealgorithmus Beispiel Betrachten folgende Tabelle mit Studenteninformationen: (Annahme: nur ein Studium pro Student) Vname Nname MNr Stkz Studium LvaNr Lva Datum Note Tabellen: MNr, Vname, Nname, Stkz Stkz, Studium LvaNr, Lva MNr, LvaNr, Datum, Note Die letzte Tabelle enthält Kandidatenschlüssel der ursprünglichen Tabelle, also sind wir fertig.
Boyce-Codd Normal Form Outline 1 Organisatorisches 2 SQL 3 Überblick Datenbankdesign 4 Normalisierung Erste Normalform Zweite Normalform Dritte Normalform Boyce-Codd Normal Form Vierte Normalform
Boyce-Codd Normal Form Boyce-Codd Normalform Definition (BCNF) Eine Relation ist in BCNF, wenn sie in 1NF ist und für jede FD α β mindestens eine der folgenden eine der folgenden Bedingungen gilt: 1 β α, d.h. die FD α β ist trivial, 2 α ist ein Superschlüssel. Unterschied zu 3NF: β darf nicht mehr Teil eines Kandidatenschlüssels sein. Intuition: Wie für 3NF wollen wir für BCNF keine FDs zwischen Nichtschlüsselattributen haben (inkl. Attribute, die Teil eines Kandidatenschlüssels sind, aber nicht als Primärschlüssel verwendet werden).
Boyce-Codd Normal Form Boyce-Codd Normalform Beispiel Beispiel. MNr LvaNr Semester Semesterabk Datum Note WS 2015/16 W15 Die Relation zwischen Semester und Semesterabk ist 1:1, sodass { MNr, LvaNr, Semester, Datum } ein Kandidatenschlüssel ist. Wir haben FDs: {Semester} {Semesterabk} und {Semesterabk} {Semester} Weder Semster noch Semesterabk ist Superschlüssel, noch sind die FDs trivial. Tabelle ist nicht in BCNF
Boyce-Codd Normal Form Boyce-Codd Normalform Beispiel Lösung: neue Tabelle für Semester MNr LvaNr Semesterabk Datum Note Semesterabk Semester
Boyce-Codd Normal Form Dekompositionsalgorithmus für BCNF Gegeben: Wir wollen: Relation R, Menge F von FDs Zerlegung R 1,..., R n in BCNF Dekompositionsalgorithmus: Initialisiere Z := {R}; while (es gibt R i in Z, das nicht in BCNF) do 1 Finde FD α β in R i mit α β = und α R i. 2 Zerlege R i in R i1 := α β und R i2 := R i β. 3 Ersetze R i in Z durch R i1 und R i2, d.h. Z := (Z {R i }) {R i1, R i2 }.
Boyce-Codd Normal Form 3NF vs. BCNF Der Synthesealgorithmus garantiert Zerlegung, die verlustlos, abhängigkeitserhaltend und in 3NF ist. Der Dekompositionsalgorithmus garantiert Zerlegung, die verlustlos und in BCNF ist.
Boyce-Codd Normal Form 3NF vs. BCNF Der Synthesealgorithmus garantiert Zerlegung, die verlustlos, abhängigkeitserhaltend und in 3NF ist. Der Dekompositionsalgorithmus garantiert Zerlegung, die verlustlos und in BCNF ist. Unglücklicherweise gilt: In einigen Fällen ist eine BCNF Zerlegung nicht abhängigkeitserhaltend. In diesen Fällen gibt man sich mit 3NF zufrieden.
Vierte Normalform Outline 1 Organisatorisches 2 SQL 3 Überblick Datenbankdesign 4 Normalisierung Erste Normalform Zweite Normalform Dritte Normalform Boyce-Codd Normal Form Vierte Normalform
Vierte Normalform Vierte Normalform und mehrwertige Abhängigkeiten Beispiel: möchten gerne Sprach- und Sportkurse für Studierende in Tabelle speichern: MNr Sprachkurs Sportkurs 1335335 Italienisch Schifahren 1335335 Italienisch Fechten 1335335 Italienisch Fußball 1335335 Spanisch Schifahren 1335335 Spanisch Fechten 1335335 Spanisch Fußball Es ist offensichtlich keine gute Idee, zwei (oder mehr) N : M Relationen in einer Tabelle zu speichern.
Vierte Normalform Mehrwertige Abhängigkeiten Die Abhängigkeiten {MNr} {Sprachkurs} und {MNr} {Sportkurs} sind sogenannte mehrwertige Abhängigkeiten (MVDs). Idee: Bei FD α β bestimmt gegebener Wert für α eindeutig einen Wert für β. Bei MVD α β bestimmt gegebener Wert für α eindeutig eine Menge von Werten für β. Definition (MVD) β ist mehrwertig abhängig von α (Notation: α β), wenn es für alle Tupel mit identischen α-werten mehrere Tupel mit vertauschten β-werten gibt. (MVDs sind eine Verallgemeinerung von FDs.)
Vierte Normalform Mehrwertige Abhängigkeiten Definition (MVD) β ist mehrwertig abhängig von α (Notation: α β), wenn es für alle Tupel mit identischen α-werten mehrere Tupel mit vertauschten β-werten gibt. Im Beispiel: Wenn es Zeilen 1335335, Italienisch, Fechten und 1335335, Spanisch, Fußball gibt, dann auch Zeilen 1335335, Spanisch, Fechten und 1335335, Italienisch, Fußball.
Vierte Normalform Vierte Normalform Idee: Keine Tabelle enthält mehr als eine mehrwertige Relation. Definition (4NF) Eine Relation R ist in 4NF, wenn sie in 1NF ist und für jede MVD α β mindestens eine der folgenden Bedingungen gilt: 1 die MVD α β ist trivial, d.h. entweder β α oder β = R α, 2 α ist ein Superschlüssel von R. Anmerkung: Jede Relation in 4NF ist auch in BCNF.
Vierte Normalform Vierte Normalform Beispiel MNr Sprachkurs Sportkurs 1335335 Italienisch Schifahren 1335335 Italienisch Fechten 1335335 Italienisch Fußball 1335335 Spanisch Schifahren 1335335 Spanisch Fechten 1335335 Spanisch Fußball MVDs: {MNr} {Sprachkurs} und {MNr} {Sportkurs} Tabelle nicht in 4NF
Vierte Normalform Vierte Normalform Beispiel Beispiel. MNr Sprachkurs 1335335 Italienisch 1335335 Spanisch MNr Sportkurs 1335335 Schifahren 1335335 Fechten 1335335 Fußball
Vierte Normalform Verallgemeinerter Dekompositionsalgorithmus für 4NF Gegeben: Relation R, Menge F von MVDs Wir wollen: Zerlegung R 1,..., R n in 4NF Verallgemeinerter Dekompositionsalgorithmus: Initialisiere Z := {R}; while (es gibt R i in Z, das nicht in 4NF) do 1 Finde MVD α β in R i mit α β = und α R i. 2 Zerlege R i in R i1 := α β und R i2 := R i β. 3 Ersetze R i in Z durch R i1 und R i2, d.h. Z := (Z {R i }) {R i1, R i2 }. (Nachdem jede Relation in 4NF auch in BCNF ist, gibt es Fälle, wo eine 4NF Zerlegung nicht abhängigkeitserhaltend ist.)
Vierte Normalform Weiteres Beispiel Datenbank Personalabteilung: pers_no name lohn abt chef projekt kurs FDs: {pers_no} {name, lohn, abt, chef} {abt} {chef} {chef} {abt} MVDs: {pers_no} {projekt} {pers_no} {kurs}
Vierte Normalform Weiteres Beispiel Wenden Dekompositionsalgorithmus an: FD {pers_no} {name, lohn, abt, chef} gibt Zerlegung pers_no name lohn abt chef pers_no projekt kurs
Vierte Normalform Weiteres Beispiel Wenden Dekompositionsalgorithmus an: FD {abt} {chef} gibt Zerlegung pers_no name lohn abt abt chef pers_no projekt kurs
Vierte Normalform Weiteres Beispiel Wenden Dekompositionsalgorithmus an: MVDs {pers_no} {projekt} und {pers_no} {kurs} geben Zerlegung pers_no name lohn abt abt chef pers_no projekt pers_no kurs
Vierte Normalform Weiteres Beispiel Wenden Dekompositionsalgorithmus an: MVDs {pers_no} {projekt} und {pers_no} {kurs} geben Zerlegung pers_no name lohn abt abt chef pers_no projekt pers_no kurs ist in 4NF
Vierte Normalform Weiteres Beispiel Wenn mehr Informationen zu Projekten und Kursen gespeichert werden sollen: pers_no name lohn abt abt chef pers_no projekt_nr pers_no kurs_nr projekt_nr name... kurs_nr name...