Datenbanken Unit 5: Funktionale Abhängigkeit

Werbung
Organisatorisches
SQL
Datenbanken
Unit 5: Funktionale Abhängigkeit
Ronald Ortner
21. III. 2017
Ronald Ortner
Funktionale Abhängigkeit
Organisatorisches
Outline
1
Organisatorisches
2
SQL
3
Funktionale Abhängigkeit
Ronald Ortner
SQL
Funktionale Abhängigkeit
Organisatorisches
Outline
1
Organisatorisches
2
SQL
3
Funktionale Abhängigkeit
Ronald Ortner
SQL
Funktionale Abhängigkeit
Organisatorisches
SQL
Funktionale Abhängigkeit
Organisatorisches
Morgen Zwischentest in den UE. Fragen?
Wissensüberprüfung zu JOINs nächste Woche.
Abschlusstest am 14.6. (Termine im MU Online nachgetragen)
Beispiel 3.20 neu gewertet
Ronald Ortner
Organisatorisches
Outline
1
Organisatorisches
2
SQL
3
Funktionale Abhängigkeit
Ronald Ortner
SQL
Funktionale Abhängigkeit
Organisatorisches
SQL
Funktionale Abhängigkeit
SQL – Häufige Fehler
Verwenden Sie NIE ein GROUP BY ohne entsprechende
Aggregatfunktion!
Subqueries (nicht korreliert):
- Lässt sich Subquery alleine ausführen?
- Welches Ergebnis gibt Subquery?
Ronald Ortner
Organisatorisches
Outline
1
Organisatorisches
2
SQL
3
Funktionale Abhängigkeit
Ronald Ortner
SQL
Funktionale Abhängigkeit
Organisatorisches
SQL
Funktionale Abhängigkeit
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.
Ronald Ortner
Organisatorisches
SQL
Abstrakte Schemata und ihre Realisierung
Bisher waren wir ein wenig schlampig.
Im folgenden unterscheiden wir oft genauer zwischen
abstrakten relationalen Datenbankschemata
(' Tabellenstruktur ohne Daten)
Notation: R
Realisierungen R solcher Schemata
(' die Daten in den Tabellen)
Notation: R
Ronald Ortner
Funktionale Abhängigkeit
Organisatorisches
SQL
Funktionale Abhängigkeit
Funktionale Abhängigkeit
Definition (funktionale Abhängigkeit)
Gegeben sei ein abstraktes relationales Datenbankschema R,
sowie (Mengen von) Attribute(n) α, β in R.
Wir sagen, dass β funktional abhängig (FD) 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 β.
Notation: α → β
Beispiele:
{ name} → { region, area, population, gdp} in cia
{ jahr, monat} → { tmin, tmax, gmin, sun, rain} in sowe
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Funktionale Abhängigkeit: Ein Beispiel
A
a4
a1
a1
a2
a3
Es gelten:
{A} → {B}
{A} → {C}
{C,D} → {B}
{B} 6→ {C}
Ronald Ortner
B
b2
b1
b1
b2
b2
C
c4
c1
c1
c3
c4
D
d3
d1
d2
d2
d3
Organisatorisches
SQL
Funktionale Abhängigkeit
Überprüfen funktionaler Abhängigkeit
Das Überprüfen, ob eine FD α → β für eine Realisierung R gilt, ist
einfach:
Sortiere R nach α.
Überprüfe ob Tupel mit gleichen α-Werten auch gleiche β-Werte
haben.
[→ Aufwand fürs Sortieren: O(n log n) für n Zeilen]
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Triviale funktionale Abhängigkeiten
Eine FD heißt trivial, wenn sie in allen möglichen Realisierungen gilt.
Charakterisierung trivialer FDs
Jede triviale FD ist von der Form α → β mit β ⊆ α.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Schlüssel und funktionale Abhängigkeiten
FDs sind eine Verallgemeinerung des Schlüssel-Konzepts.
→ Schlüssel lassen sich über FDs definieren:
Definition ((Super-)Schlüssel)
Für ein abstraktes relationales Datenbankschema R ist α ⊆ R ein
(Super-)Schlüssel, wenn
α → R.
Trivialerweise bildet die Menge aller Attribute in R einen
(Super-)Schlüssel für R (weil R → R).
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Volle funktionale Abhängigkeit
Um Kandidatenschlüssel von (Super-)Schlüsseln unterscheiden zu
können, führen wir den Begriff der vollen funktionalen Abhängigkeit
ein:
Definition (volle funktionalen Abhängigkeit)
β ist voll funktional abhängig von α, wenn
1
α → β, und
2
α ist minimal, d.h. entfernt man irgendein Attribut A aus α, so
bricht die FD zusammen, d.h. α − A 6→ β.
Notation:
Ronald Ortner
α→β
˙
Organisatorisches
SQL
Funktionale Abhängigkeit
Schlüssel und funktionale Abhängigkeiten II
Definition (Kandidatenschlüssel)
Für ein abstraktes relationales Datenbankschema R ist α ⊆ R ein
Kandidatenschlüssel, wenn
α→R.
˙
Ein Primärschlüssel ist ein beliebig gewählter Kandidatenschlüssel.
Es ist unwichtig, welcher gewählt wird.
Es ist aber wichtig, dass der gewählte Schlüssel durchgehend
verwendet wird (etwa als Fremdschlüssel in anderen Tabellen).
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Eigenschaften von FDs
Beispiel: Studierendentelefonbuch:
{[matrnr, name, strasse, plz, stadt, vorwahl, telnr]}
FDs:
{matrnr} → {name, strasse, plz, stadt}
{plz} → {vorwahl}
{matrnr} → {vorwahl}
Anmerkung: Die dritte Relation scheint aus den anderen beiden zu
folgen...
Ronald Ortner
Organisatorisches
SQL
Eigenschaften von FDs: Armstrong Axiome
Armstrong Axiome:
Reflexivität:
Wenn β ⊆ α, dann α → β.
Insbesondere gilt α → α.
Ronald Ortner
Funktionale Abhängigkeit
Organisatorisches
SQL
Eigenschaften von FDs: Armstrong Axiome
Armstrong Axiome:
Reflexivität:
Wenn β ⊆ α, dann α → β.
Insbesondere gilt α → α.
Verstärkung:
Wenn α → β, dann auch αγ → βγ.
(Notation: αγ steht für α ∪ γ.)
Ronald Ortner
Funktionale Abhängigkeit
Organisatorisches
SQL
Eigenschaften von FDs: Armstrong Axiome
Armstrong Axiome:
Reflexivität:
Wenn β ⊆ α, dann α → β.
Insbesondere gilt α → α.
Verstärkung:
Wenn α → β, dann auch αγ → βγ.
(Notation: αγ steht für α ∪ γ.)
Transitivität:
Wenn α → β und β → γ, dann auch α → γ.
Ronald Ortner
Funktionale Abhängigkeit
Organisatorisches
SQL
Funktionale Abhängigkeit
Eigenschaften von FDs: Der Abschluss
Definition (Abschluss)
Sei R eine Relation und F eine Menge von FDs in R.
Der Abschluss F + von F ist die Menge aller FDs, die logisch aus den
FDs in F folgen.
Korrektheit und Vollständigkeit der Armstrong Axiome
Alles, was aus F mithilfe der Armstrong Axiome abgeleitet werden
kann, ist in F + (Korrektheit).
Alle FDs in F + können aus F mithilfe der Armstrong Axiome
abgeleitet werden (Vollständigkeit).
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Noch mehr Eigenschaften von FDs
Mithilfe der Armstrong Axiome können weiters folgende Eigenschaften
abgeleitet werden:
Vereinigung:
Wenn α → β und α → γ, dann α → βγ.
Dekompositionsregel:
Wenn α → βγ, dann α → β und α → γ.
Pseudotransitivität:
Wenn α → β und βγ → δ, dann auch αγ → δ.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Eigenschaften von FDs: Zurück zum Beispiel
Beispiel: Studierendentelefonbuch:
{[matrnr, name, strasse, plz, stadt, vorwahl, telnr]}
FDs:
{matrnr} → {name, strasse, plz, stadt}
{plz} → {vorwahl}
{matrnr} → {vorwahl}
Ableitung der dritten FD aus den anderen beiden:
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Eigenschaften von FDs: Zurück zum Beispiel
Beispiel: Studierendentelefonbuch:
{[matrnr, name, strasse, plz, stadt, vorwahl, telnr]}
FDs:
{matrnr} → {name, strasse, plz, stadt}
{plz} → {vorwahl}
{matrnr} → {vorwahl}
Ableitung der dritten FD aus den anderen beiden:
Durch (wiederholte) Dekomposition folgt aus (1):
{matrnr} → {plz}
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Eigenschaften von FDs: Zurück zum Beispiel
Beispiel: Studierendentelefonbuch:
{[matrnr, name, strasse, plz, stadt, vorwahl, telnr]}
FDs:
{matrnr} → {name, strasse, plz, stadt}
{plz} → {vorwahl}
{matrnr} → {vorwahl}
Ableitung der dritten FD aus den anderen beiden:
Durch (wiederholte) Dekomposition folgt aus (1):
{matrnr} → {plz}
Zusammen mit (2) folgt mit Transitivität (3).
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Bestimmung funktional abhängiger Attribute
Gegeben: Attribute α, Menge F von FDs
+
Wollen: alle Attribute αF
, die von α funktional abhängig sind
Algorithmus:
+
Initialisiere αF
:= {α}, change:=true;
while (change) do{
change=false;
for each FD β → γ in F do{
+
if (β ⊆ αF
) then{
+
+
αF := αF
∪ γ;
change=true;
}}}
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Bestimmung funktional abhängiger Attribute
Beispiel:
Sei F = {C → DA, A → BC, E → ABC, F → BC, CD → BF }.
Berechne A+
F.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Bestimmung funktional abhängiger Attribute
Beispiel:
Sei F = {C → DA, A → BC, E → ABC, F → BC, CD → BF }.
Berechne A+
F.
A+
F = {A, B, C, D, F }
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Bestimmung funktional abhängiger Attribute
Beispiel:
Sei F = {C → DA, A → BC, E → ABC, F → BC, CD → BF }.
Berechne A+
F.
A+
F = {A, B, C, D, F }
Der Algorithmus kann auch dazu verwendet werden, um
(Super-)Schlüssel κ zu finden:
Wenn κ+ = R, dann ist κ ein (Super-)Schlüssel von R.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Äquivalenz und kanonische Überdeckung
Definition (Äquivalenz)
Zwei Mengen F, G von FDs heißen äquivalent (F ≡ G), wenn
F + = G +.
Intuitiv: F, G sind äquivalent, wenn dieselben FDs ableitbar sind.
Problem: F + ist im allgemeinen recht groß und unstrukturiert.
Lösung: Wähle für jedes F ein spezielles G mit F ≡ G.
(So ein G heißt kanonische Überdeckung.)
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Kanonische Überdeckung
Definition (kanonische Überdeckung)
Sei F eine Menge von FDs. Fc heißt kanonische Überdeckung von F,
wenn
1
Fc ≡ F (d.h., Fc+ = F + )
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Kanonische Überdeckung
Definition (kanonische Überdeckung)
Sei F eine Menge von FDs. Fc heißt kanonische Überdeckung von F,
wenn
1
2
Fc ≡ F (d.h., Fc+ = F + )
In allen FDs α → β aus Fc enthalten weder α noch β redundante
Attribute, d.h.:
1
2
Ronald Ortner
für alle A in α: (Fc − {α → β}) ∪ {(α − A) → β} ≡
6 Fc
für alle B in β: (Fc − {α → β}) ∪ {α → (β − B)} ≡
6 Fc
Organisatorisches
SQL
Funktionale Abhängigkeit
Kanonische Überdeckung
Definition (kanonische Überdeckung)
Sei F eine Menge von FDs. Fc heißt kanonische Überdeckung von F,
wenn
1
2
Fc ≡ F (d.h., Fc+ = F + )
In allen FDs α → β aus Fc enthalten weder α noch β redundante
Attribute, d.h.:
1
2
3
für alle A in α: (Fc − {α → β}) ∪ {(α − A) → β} ≡
6 Fc
für alle B in β: (Fc − {α → β}) ∪ {α → (β − B)} ≡
6 Fc
Für jede FD α → β in Fc gibt es keine andere FD der Form α → γ
in Fc .
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Kanonische Überdeckung
Definition (kanonische Überdeckung)
Sei F eine Menge von FDs. Fc heißt kanonische Überdeckung von F,
wenn
1
2
Fc ≡ F (d.h., Fc+ = F + )
In allen FDs α → β aus Fc enthalten weder α noch β redundante
Attribute, d.h.:
1
2
3
für alle A in α: (Fc − {α → β}) ∪ {(α − A) → β} ≡
6 Fc
für alle B in β: (Fc − {α → β}) ∪ {α → (β − B)} ≡
6 Fc
Für jede FD α → β in Fc gibt es keine andere FD der Form α → γ
in Fc .
Anmerkung: Bedingung 3 kann durch wiederholte Zusammenfassung
von FDs α → β, α → γ to α → βγ erreicht werden.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung
Gegeben: Menge F of FDs
Wollen: kanonische Überdeckung Fc
Algorithmus:
1
Führe für jede FD α → β in F Linksreduktion aus:
Überprüfe für alle A in α, ob A redundant, d.h., β ⊆ (α − A)+
F.
In diesem Fall ersetze α → β durch (α − A) → β.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung
Gegeben: Menge F of FDs
Wollen: kanonische Überdeckung Fc
Algorithmus:
1
Führe für jede FD α → β in F Linksreduktion aus:
Überprüfe für alle A in α, ob A redundant, d.h., β ⊆ (α − A)+
F.
In diesem Fall ersetze α → β durch (α − A) → β.
2
Führe für jede FD α → β in F Rechtsreduktion aus:
Überprüfe für alle B in β, ob B redundant, d.h., B in
+
αF
−{α→β})∪{α→(β−B)} . In diesem Fall ersetze α → β durch
α → (β − B).
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung
Gegeben: Menge F of FDs
Wollen: kanonische Überdeckung Fc
Algorithmus:
1
Führe für jede FD α → β in F Linksreduktion aus:
Überprüfe für alle A in α, ob A redundant, d.h., β ⊆ (α − A)+
F.
In diesem Fall ersetze α → β durch (α − A) → β.
2
Führe für jede FD α → β in F Rechtsreduktion aus:
Überprüfe für alle B in β, ob B redundant, d.h., B in
+
αF
−{α→β})∪{α→(β−B)} . In diesem Fall ersetze α → β durch
α → (β − B).
3
Entferne FDs α → ∅ aus F. (Diese können in Schritt 2 entstehen.)
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung
Gegeben: Menge F of FDs
Wollen: kanonische Überdeckung Fc
Algorithmus:
1
Führe für jede FD α → β in F Linksreduktion aus:
Überprüfe für alle A in α, ob A redundant, d.h., β ⊆ (α − A)+
F.
In diesem Fall ersetze α → β durch (α − A) → β.
2
Führe für jede FD α → β in F Rechtsreduktion aus:
Überprüfe für alle B in β, ob B redundant, d.h., B in
+
αF
−{α→β})∪{α→(β−B)} . In diesem Fall ersetze α → β durch
α → (β − B).
3
Entferne FDs α → ∅ aus F. (Diese können in Schritt 2 entstehen.)
4
Fasse FDs α → β1 , α → β2 ,. . . , α → βk zusammen zu
α → β1 β2 . . . βk .
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung:
Beispiel: F = {A → B, B → C, AB → C}
In Schritt 1 des Algorithmus ersetzen wir AB → C durch A → C,
da C in A+
F : C folgt aus A → B und B → C, wenn A gegeben.
Dann F = {A → B, B → C, A → C}.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung:
Beispiel: F = {A → B, B → C, AB → C}
In Schritt 1 des Algorithmus ersetzen wir AB → C durch A → C,
da C in A+
F : C folgt aus A → B und B → C, wenn A gegeben.
Dann F = {A → B, B → C, A → C}.
In Schritt 2 ersetzen wir A → C durch A → ∅, da C redundant:
C in A+
{A→B,B→C,A→∅} .
Dann F = {A → B, B → C, A → ∅}.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung:
Beispiel: F = {A → B, B → C, AB → C}
In Schritt 1 des Algorithmus ersetzen wir AB → C durch A → C,
da C in A+
F : C folgt aus A → B und B → C, wenn A gegeben.
Dann F = {A → B, B → C, A → C}.
In Schritt 2 ersetzen wir A → C durch A → ∅, da C redundant:
C in A+
{A→B,B→C,A→∅} .
Dann F = {A → B, B → C, A → ∅}.
In Schritt 3 entfernen wir A → ∅.
Dann F = {A → B, B → C}.
Ronald Ortner
Organisatorisches
SQL
Funktionale Abhängigkeit
Berechnung der kanonischen Überdeckung:
Beispiel: F = {A → B, B → C, AB → C}
In Schritt 1 des Algorithmus ersetzen wir AB → C durch A → C,
da C in A+
F : C folgt aus A → B und B → C, wenn A gegeben.
Dann F = {A → B, B → C, A → C}.
In Schritt 2 ersetzen wir A → C durch A → ∅, da C redundant:
C in A+
{A→B,B→C,A→∅} .
Dann F = {A → B, B → C, A → ∅}.
In Schritt 3 entfernen wir A → ∅.
Dann F = {A → B, B → C}.
Schritt 4 lässt F unverändert, sodass die kanonische
Überdeckung Fc = {A → B, B → C}.
Ronald Ortner
Herunterladen