Datenbanksysteme und Datenmodellierung Begleitende Übung zur Vorlesung von Prof. Dr. Uwe H. Suhl Normalisierung (2) und „Weihnachts-Special“ (Termin #08: 15.12.2004) Dipl.-Kfm. Sebastian Thimm Wintersemester 2004 / 2005 Freie Universität Berlin Fachbereich Wirtschaftswissenschaft Institut für Produktion, Wirtschaftsinformatik und OR Lehrstuhl für Wirtschaftsinformatik, Prof. Dr. Suhl Terminübersicht (Übung) KW 43 Keine Ü (nur V) KW 44 27.10.04 Organisatorisches / Einführung und Grundlagen (KVVonline) KW 45 03.11.04 Grundlagen: Arbeiten mit Datenbankprodukten (1) KW 46 10.11.04 Grundlagen: Arbeiten mit Datenbankprodukten (2) KW 47 17.11.04 Datenmodellierung: ERM KW 48 24.11.04 Datenmodellierung: Relationenmodell KW 49 01.12.04 Datenmodellierung: Normalisierung (1) KW 50 08.12.04 Datenmodellierung: Besprechung Aufgabenblatt 4 KW 51 15.12.04 Datenmodellierung: Normalisierung (2) KW 52 22.12.04 Keine V/Ü (Ferien) KW 53 29.12.04 Keine V/Ü (Ferien) KW 1 05.01.05 Datenmodellierung: Normalisierung (3) und SQL KW 2 12.01.05 Datenmodellierung: SQL KW 3 19.01.05 Datenmodellierung: SQL KW 4 26.01.05 Gastvortrag KW 5 02.02.05 Datenbanken in der Systementwicklung (Anwendungsfall) KW 6 09.02.05 Klausurvorbereitung KW 7 16.02.05 Klausurvorbereitung KW 8 24.02.05 Klausur (90 Minuten, 4 CPS) 1 Heutige Agenda 1. Fortsetzung: Besprechung der Lösungen von Übungsblatt 4 (Aufgabe 16 ff.) 2. Normalisierung I: 1NF bis BCNF Kurze Wiederholung der Konzepte Einige Übungsaufgaben Æ Übungsblatt 6 3. Normalisierung II: 4NF und 5NF Mehrwertige Abhängigkeiten Verlustfreiheit und Abhängigkeitstreue 4. Weihnachts-Special .NET-TV zum Thema Datenbankzugriff (Film, ca. 30 Minuten) Dipl.-Kfm. Sebastian Thimm Fortsetzung: Besprechung der Lösungen von Übungsblatt 4 (Aufgaben 16-24) Siehe Foliensatz zur vorherigen Übung! Dipl.-Kfm. Sebastian Thimm 2 Normalformen: Überblick 1. Normalform (1NF) 2. Normalform (2NF) 3. Normalform (3NF) Basisannahme: fast trivial basierend auf dem Konzept der funktionalen Abhängigkeiten Boyce-Codd-Normalform (BCNF) 4. Normalform (4NF) basierend auf dem Konzept der mehrwertigen Abhängigkeiten 5. Normalform (5NF) / Project-Join-Normalform (PJNF) basierend auf dem Konzept der Join-Abhängigkeiten Domain-Key-Normalform (DKNF) „ultimative Normalform“ (jedoch faktisch keine praktische Relevanz) Dipl.-Kfm. Sebastian Thimm Übersicht: NF auf Basis f. A. (1NF bis BCNF) Definition: Erste Normalform (1NF) Ein Relationstyp befindet sich in der ersten Normalform, wenn der Wertebereich jedes seiner Attribute atomar ist. Definition: Zweite Normalform (2NF) Ein Relationstyp befindet sich in der zweiten Normalform, wenn er sich in 1. Normalform befindet und jedes Nichtschlüsselattribut von jedem Kandidatenschlüssel voll funktional abhängig ist. Definition: Dritte Normalform (3NF) Ein Relationstyp befindet sich in der dritten Normalform, wenn er sich in der 2. Normalform befindet und kein Nichtschlüsselattribut transitiv von einem Kandidatenschlüssel abhängig ist. Definition: Boyce-Codd-Normalform (BCNF) Ein Relationstyp befindet sich in Boyce-Codd-Normalform, wenn jede Determinante Kandidatenschlüssel ist. Dipl.-Kfm. Sebastian Thimm 3 Übersicht: Notw. Definitionen für 1NF - BCNF Definition: Ein(e) Attribut(gruppe) Y heißt funktional abhängig von Attribut(-gruppe) X, wenn es zu jedem Wert von X nur genau einen Wert von Y geben kann. Definition: Ein(e) Attribut(gruppe) Y heißt voll funktional abhängig von Attribut(gruppe) X, wenn Y von X funktional abhängig ist und es keine Teilmenge von X gibt, von der Y funktional abhängig ist. Definition: Ein(e) Attribut(gruppe) Z heißt transitiv abhängig vom Schlüsselkandidaten X, wenn ein(e) Nichtschlüsselattribut(gruppe) Y existiert, von der Z funktional abhängig ist, wobei Y selbst funktional von X abhängig ist. Definition: Ein(e) Attribut(gruppe) X heißt Determinante, wenn es mindestens ein anderes Attribut Y gibt, welches von X voll funktional anhängig ist. Dipl.-Kfm. Sebastian Thimm Normalisierung: Empfohlenes Vorgehen 1. Prüfen, ob alle Attribute atomar sind. Î 1NF In der Klausur nicht nötig, da gegeben. 2. Alle funktionalen und voll funktionalen Abhängigkeiten identifizieren. Am besten aufzeichnen! 3. Alle Kandidatenschlüssel identifizieren. Dabei: Schlüssel- und Nichtschlüsselattribute identifizieren. 4. Falls zusammengesetzte Kandidatenschlüssel vorhanden sind, sicherstellen, dass kein Nichtschlüsselattribut von einer Teilmenge eines Kandidatenschlüssels abhängt. Î 2NF 5. Alle Abhängigkeiten zwischen Nichtschlüsselattributen beseitigen. Î 3NF 6. Sicherstellen, dass jede Determinante ein Kandidatenschlüssel ist. Î BCNF Dipl.-Kfm. Sebastian Thimm 4 Normalisierung: Übung (Aufgabe 6.2) Überführe den folgenden Relationstyp in die BCNF! Rechnungen (Rech#, Datum, Gesamtsumme, Menge, Kunden#, Kundenname, Kundenadresse, Artikel#, Artikelbezeichnung, EKPreis, VKPreis) Lösung: Kunden (Kunden#, Kundenname, Kundenadresse) oder besser: Kunden (Kunden#, Kundenname, Strasse, Hausnummer, PLZ, Ort) Artikel (Artikel#, Artikelbezeichnung, EKPreis, VKPreis) Rechnungen (Rech#, Datum, Kunden#) Rechnungspositionen (Rech#, Artikel#, Menge) Dipl.-Kfm. Sebastian Thimm Normalisierung: Übung Überführe den folgenden Relationstyp in die BCNF! Projektverwaltung (Pro#, Pro-Name, Auftraggeber#, Auftraggeber-Name, Mitarbeiter#, MitarbeiterName, Mit-Gehalt, Arbeitszeitanteil) Lösung: Projekt (Pro#, Pro-Name, Auftraggeber#) Auftraggeber (Auftraggeber#, Auftraggeber-Name) Mitarbeiter (Mitarbeiter#, Mitarbeiter-Name, Mit-Gehalt) Arbeitszeit (Pro#, Mitarbeiter#, Arbeitszeitanteil) Dipl.-Kfm. Sebastian Thimm 5 Normalisierung: Übung (Aufgabe 6.1, 1-6) Gegeben sei folgender Relationstyp in 1NF: Stimmen folgende Aussagen? R (a, b, c) 1. Als triviale funktionale Abhängigkeit wird a → a bezeichnet. Ja! Ja, sogar 2. Es sei: (a, c) ⇒ b und (a, b) ⇒ c. Dann liegt mindestens 3NF vor, da es keine Nichtschlüsselattribute gibt. BCNF! 3. Es sei: (a, c) → b und c → b (Achtung, Fehler auf dem Aufgabenblatt!) Nein, nur Dann gilt: Da b funktional von c abhängig ist, befindet sich R in der 2. NF. 1NF! 4. Es sei: c → a und c → b Dann gilt: Da es keinen zusammengesetzten Kandidatenschlüssel gibt, liegt mindestens 2NF vor. Ja, sogar BCNF! 5. Es sei: (a, c) ⇒ b, dann gilt: 1. Da b voll funktional abhängig von der Attributgruppe (a, c) ist, liegt mindestens 2. NF vor. Ja! Nein! Zwar BCNF, aber weil jede 2. Da es nur ein Nichtschlüsselattribut gibt, befindet sich R in der BCNF. Det. ein KS! 6. Es sei: a → b, c → a und c → b Dann gilt: Da b transitiv von c abhängig ist, befindet sich R nicht in der 3. NF. Ja, nämlich 2NF! Aufgaben 6.76.7-6.9 bitte selbstä selbständig lö lösen! Dipl.-Kfm. Sebastian Thimm Normalisierung: Übung (analog zu 6.4) Gegeben sei folgender Relationstyp in 1NF: Wie lautet die höchste Normalform in der sich R befindet, wenn jeweils gilt: R (a, b, c) 1. (a, c) → b und (a, b) → c 2. (a, c) → b und a→b 1NF! KS: (a, c) 3. (a, c) → b und a→c BCNF! KS: a 4. a → b und b→a 3NF! KS: (a, c) und (b, c) 5. (a, c) → b und b→a 3NF! KS: (a, c) und (b, c) BCNF! KS: (a, c) und (a, b) 6. b → a 1NF! KS: (b, c) 7. (a, b) sei KS und a Æ c 1NF! KS: (a, b) 8. (a, b) sei KS und (b, c) sei KS und a→c 3NF! KS: (a, b) und (b, c) 9. (a, b) Æ c und (a, c) → b und c→b 3NF! KS: (a, b) und (a, c) 10.(a, b) sei KS und (b, c) → a BCNF! KS: (a, b) und (b, c) Dipl.-Kfm. Sebastian Thimm 6 Einschub: Wie löst man solche Aufgaben? Beispiel: Gegeben sei R (a, b, c, d, e) und folgende funktionale Abhängigkeiten: cÆa cÆb cÆd cÆe dÆe dÆc ferner sei bekannt, dass (a, b) KS ist. R (a, b, c, d, e) Wie lauten alle KS? (a, b), aber auch c! Welches sind die NichtNur d und e! schlüsselattribute? Welche höchste NF liegt vor? Nur 2 NF, da e über d sogar von beiden KS transitiv abhängig ist! Dipl.-Kfm. Sebastian Thimm Einschub: Wie löst man solche Aufgaben? Weiteres Beispiel: Gegeben sei R (a, b, c) und folgende funktionale Abhängigkeit: aÆb R (a, b, c) Wie lauten alle KS? (a, c) Welches sind die Nicht- Nur b! schlüsselattribute? Welche höchste NF liegt vor? Nur 1 NF, da b vom einzigen KS (a, c) nicht voll (sondern nur partiell) funktional abhängig ist. Dipl.-Kfm. Sebastian Thimm 7 Normalisierung: Übung (Aufgabe 6.5 – A) Überführe in BCNF: a Æ b, c, d, e bÆc A (a, b, c, d, e) 2NF liegt vor, KS: a Zerlegung in: A1 (a, b, d, e) A2 (b, c) Dipl.-Kfm. Sebastian Thimm Normalisierung: Übung (Aufgabe 6.5 – D) Überführe in BCNF: (a, b) ⇒ c, d, e bÆc D (a, b, c, d, e) 1NF liegt vor, KS: (a, b) Zerlegung in: D1 (a, b, d, e) D2 (b, c) Dipl.-Kfm. Sebastian Thimm 8 Normalisierung: Übung (Aufgabe 6.5 – G) Überführe in BCNF: (a, b) ⇒ c, d, e (a, c) ⇒ b, d, e cÆd G (a, b, c, d, e) 1NF liegt vor, KS: (a, b), (a, c) Zerlegung in: G1 (a, b, c, e) G2 (c, d) Dipl.-Kfm. Sebastian Thimm „Weihnachts-Special“: Film gucken! Folge IV (April 2004): Datenbankzugriff mit ADO.NET: Ökologisch wertvoll Dauer: Ca. 30 Minuten Das Video ist übrigens in den Veranstaltungsmaterialien verlinkt! Dipl.-Kfm. Sebastian Thimm 9 „Weihnachts-Special“: Film gucken! Direkter Datenbankzugriff: Klassisch Jede Anwendung bzw. jeder Benutzer hält (mehr oder weniger) permanent Verbindung zur Datenbank aufrecht. Alle Datenmanipulationen werden mit SQL direkt auf dem Server ausgeführt. Daten werden vom Server i. d. R. in Form von zweidimensionalen Recordsets zur Verfügung gestellt, die von der Anwendung lediglich sequentiell gelesen werden können. Das Recordset-Konzept basiert auf einem sog. Server-seitigen Cursor. Indirekter Datenbankzugriff: Modern Recordset-Konzept wird ersetzt durch sog. DataSet. DataSet lässt sich als kleine “In-Memory“-DBS vorstellen und kann mehrere Tabellen beinhalten. Anwendung kann mit DataSet offline arbeiten – Verbindung zum Server wird nur für Synchronisierungen und Updates benötigt. Î Deutlich effizientere Nutzung der Datenbankressource! Dipl.-Kfm. Sebastian Thimm ADO.NET: Direkter Datenbankzugriff OleDbConnection Verbindung = new OleDbConnection(); OleDbCommand Kommando = new OleDbCommand(); OleDbDataReader Leser; Verbindung.ConnectionString = „PROVIDER=Platzhalter für Connectionstring“; Kommando.CommandText = „SELECT * FROM Kunden“; Kommando.Connection = Verbindung; Kommando.Connection.Open(); Leser = Kommando.ExecuteReader(); while (Leser.Read()) { Console.WriteLine(...); } PS: Hier „klassischer“ Zugriff ohne das im Film vorgestellte DataSet (sondern so, wie im Programmierpraktikum.NET im SS’04 gezeigt)! OleDbCommand OleDb Connection OleDb DataReader OLE DB (z.B. Access) Client (z.B. Console) Dipl.-Kfm. Sebastian Thimm 10 .NET TV: Folge 4 (April 2004) Wer den Film verpasst hat oder ihn nochmals sehen möchte, besucht bitte folgende URL: http://www.microsoft.com/germany/ms/msdnbiblio/ dotnettv/april_2004.htm (siehe auch Link auf der Website zur Lehrveranstaltung) Dipl.-Kfm. Sebastian Thimm 11