Datenbanken Unit 7: Normalisierung ctd. 4. IV. 2017
Outline 1 Organisatorisches 2 SQL 3 Normalisierung ctd Wiederholung 1NF bis 3NF/BCNF
Organisatorisches Zweiter Zwischentest in der ersten UE nach den Osterferien. Stoff: Alles bisher, exklusive heute (ohne Self Joins) Neue ÜBeispiele abzugeben bis 17. Mai. NULL-Werte im ersten Zwischentest: 100% = 9 Punkte
SQL Nachbesprechung Wissensüberprüfung Self Joins
Nachbesprechung Wissensüberprüfung DISTINCT Totaler Join
DISTINCT Zum Löschen von Mehrfacheinträgen in Ergebnistabellen verwendet man einfach DISTINCT. Bei Mehrfacheinträgen in Ergebnistabellen erkennt Abgabesystem die Abfrage nicht als richtig an! GROUP BY soll ausschließlich zur Berechnung von Aggregatfunktionen verwendet werden: Kein GROUP BY ohne Aggregatfunktion im SELECT!!!
Totaler Join Joins auf alle Tabellen der Datenbank sind keine gute Idee: manche Einträge fallen raus zuviele Einträge bei N : M-Relationen ( falsches Ergebnis für COUNT bzw. SUM) Performance Join immer nur auf jene Tabellen, die für Beantwortung der Frage benötigt werden!
Wiederholung 1NF bis 3NF/BCNF Outline 1 Organisatorisches 2 SQL 3 Normalisierung ctd Wiederholung 1NF bis 3NF/BCNF
Wiederholung 1NF bis 3NF/BCNF Normalisierung: Überblick Wir kennen inzwischen: funktionale Abhängigkeiten (FDs) Eigenschaften guter Zerlegungen (Verlustlosigkeit, Abhängigkeitserhaltung)
Wiederholung 1NF bis 3NF/BCNF Normalisierung: Überblick 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
Wiederholung 1NF bis 3NF/BCNF Normalisierung: Überblick 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).
Wiederholung 1NF bis 3NF/BCNF Normalisierung: NF1 bis NF3/BCNF NF1: alle Spalten atomar NF2: alle Nichtschlüsselattribute voll funktional abhängig vom Schlüssel NF3 u. BCNF: keine funktionalen Abhängigkeiten zwischen Nichtschlüsselattributen
Outline 1 Organisatorisches 2 SQL 3 Normalisierung ctd Wiederholung 1NF bis 3NF/BCNF
und mehrwertige Abhängigkeiten Beispiel: möchten gerne Sprach- und Sportkurse für Studierende in Tabelle speichern: MNr Sprachkurs Sportkurs 1335335 Italienisch Schifahren 1335335 Spanisch Fechten 1335335 NULL Fußball Es ist offensichtlich keine gute Idee, zwei (oder mehr) voneinander unabhängige N : M Relationen in einer Tabelle zu speichern.
Beispiel Beispiel. Offenbar ist es besser, die beiden Relationen zu trennen: MNr Sprachkurs 1335335 Italienisch 1335335 Spanisch MNr Sportkurs 1335335 Schifahren 1335335 Fechten 1335335 Fußball
Beispiel Ein Join der beiden Relationen gibt für jeden Studenten alle Kombinationen von Sport- und Sprachkursen. MNr Sprachkurs Sportkurs 1335335 Italienisch Schifahren 1335335 Italienisch Fechten 1335335 Italienisch Fußball 1335335 Spanisch Schifahren 1335335 Spanisch Fechten 1335335 Spanisch Fußball
Beispiel Ein Join der beiden Relationen gibt für jeden Studenten alle Kombinationen von Sport- und Sprachkursen. MNr Sprachkurs Sportkurs 1335335 Italienisch Schifahren 1335335 Italienisch Fechten 1335335 Italienisch Fußball 1335335 Spanisch Schifahren 1335335 Spanisch Fechten 1335335 Spanisch Fußball Aufgrund der Verlustlosigkeitsbedingung müssen wir verlangen, dass beim Speichern von mehreren N : M Relationen in einer Tabelle jeweils alle Kombinationen von Werten abgelegt werden.
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.)
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.
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.
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
Beispiel Beispiel. MNr Sprachkurs 1335335 Italienisch 1335335 Spanisch MNr Sportkurs 1335335 Schifahren 1335335 Fechten 1335335 Fußball ist in 4NF, weil MVDs {MNr} {Sprachkurs} und {MNr} {Sportkurs} in den beiden Tabellen R 1 und R 2 trivial: {Sprachkurs} = R 1 {MNr} und {Sportkurs} = R 2 {MNr}
4NF: Beispiel Achtung! Folgende Tabelle ist in 4NF. Gast Gasthof Bier R.Ortner Gösserbräu Gösser F.Huber Zur Post Gösser R.Ortner Zur Post Murauer
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.)
Weiteres Beispiel Datenbank Personalabteilung: pers_no name lohn abt chef projekt kurs
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}
Weiteres Beispiel Wenden Dekompositionsalgorithmus an: FD {pers_no} {name, lohn, abt, chef} gibt Zerlegung pers_no name lohn abt chef pers_no projekt kurs
Weiteres Beispiel Wenden Dekompositionsalgorithmus an: FD {abt} {chef} gibt Zerlegung pers_no name lohn abt abt chef pers_no projekt kurs
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
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
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...