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