Zusammenfassung
Transcription
Zusammenfassung
Einführung in Datenbanken (DBS1) Andreas Blunk März 2006, Berlin Der vorliegende Text ist eine Zusammenfassung der wichtigsten Themen aus der Vorlesung Einführung in Datenbanken (DBS1) im März 2006. Ich habe die Zusammenfassung zur Prüfungsvorbereitung benutzt und nach der Klausur den Abschnitt Prüfungsfragen ergänzt. Dieser enthält alle Fragen aus der Klausur, die ich mir noch merken konnte. Diese Fragen können wirklich so gestellt werden. Inhaltsverzeichnis 1. Das Relationale Modell 1.1. Strukturelle Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 2. Entwurf relationaler Datenbanken 2.1. Funktionale Abhängigkeiten (FD) . . . . 2.1.1. Logische Folgerbarkeit . . . . . . 2.1.2. Die Hülle . . . . . . . . . . . . . 2.1.3. Formale Definition des Schlüssels 2.1.4. Armstrong-Kalkül . . . . . . . . 2.2. Normalisierung . . . . . . . . . . . . . . . . . . . . 5 5 5 5 6 6 7 . . . . . . . . . . . 8 8 8 8 9 9 9 9 9 10 10 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Relationale Anfragesprachen 3.1. Operationen der Relationalen Algebra . . . . . . . 3.1.1. Grundoperationen . . . . . . . . . . . . . . 3.1.2. Weitere Operationen . . . . . . . . . . . . . 3.2. Logik als Anfragesprache - der Relationenkalkül . . 3.2.1. Well-Formed-Formula (WFF) . . . . . . . . 3.2.2. Interpretation von WFFs . . . . . . . . . . 3.2.3. Abbildung von WFF auf Wahrheitswerte W 3.2.4. Das Domänenkalkül . . . . . . . . . . . . . 3.2.5. RA nach DRC (am Beispiel) . . . . . . . . 3.2.6. Beschränkte Variablen in WFFs . . . . . . 3.2.7. Sichere (safe) DRC-Formeln . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inhaltsverzeichnis 4. Anfragebearbeitung 4.1. Gesetze zur Optimierung . . . . . . . . . . . . 4.1.1. Joins und Produkte . . . . . . . . . . 4.1.2. Projektion und Selektion . . . . . . . 4.1.3. Selektion und Join . . . . . . . . . . . 4.1.4. Selektion und Vereinigung / Differenz 4.1.5. Projektion und Join . . . . . . . . . . 4.1.6. Projektion und Vereinigung . . . . . . 4.1.7. Selektion und Produkt . . . . . . . . . 4.1.8. Umschreiben eines Produktes . . . . . 4.2. Beispiel für eine Optimierung . . . . . . . . . 4.3. Nested-Loop-Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 11 12 12 12 12 12 13 13 13 5. Speicherstrukturen 14 5.1. B-Baum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.2. B*-Baum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6. Transaktionskonzept 15 6.1. 2-Phasen-Sperrprotokoll (2PL) . . . . . . . . . . . . . . . . . . . . . . . . 15 6.2. Fehlererholung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 7. XML 17 7.1. DTD für ein Adressbuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 7.2. Die Verwendung von ID und IDREF . . . . . . . . . . . . . . . . . . . . . 17 A. Algorithmen A.1. Die Hülle (bezüglich einer Attributmenge) A.2. Schlüsselkandidaten bestimmen . . . . . . A.3. Basis bzw. minimale Überdeckung . . . . A.4. Lossless-Join-Zerlegung . . . . . . . . . . A.5. Dekomposition . . . . . . . . . . . . . . . A.6. Synthese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 21 22 24 24 B. Prüfungsfragen B.1. ER-Modell . . . . . . . . . . B.2. Funktionale Abhängigkeiten B.3. Relationale Algebra . . . . B.4. SQL . . . . . . . . . . . . . B.5. B-Baum . . . . . . . . . . . B.6. XML . . . . . . . . . . . . . B.7. Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 26 27 27 28 29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. Das Relationale Modell 1. Das Relationale Modell 1.1. Strukturelle Definitionen Die Domäne ist der Wertebereich einer Relation. Man unterscheidet: intensionale (Integer, Real, String) und extensionale (explizite Auflistung der Werte, z.B. Farbe = rot, grün, blau) Domänen. Eine Relation ist eine Teilmenge des Kreuzproduktes von Domänen, d.h. R ⊆ D1 × D2 × . . . × Dn Ein Element einer Relation wird als Tupel bezeichnet. Beispiel: • Domäne D1 = { rot, grün, blau, gelb } • Domäne D2 = { VW, Opel, Mercedes } • Relation R1 = { (VW,grün), (Opel,rot) } • ein Tupel von R1 ist (VW,grün) Die sog. Spalten“ einer Relation werden als Attribute bezeichnet. Diese müssen in” nerhalb einer Relation eindeutig sein. Beispiel: Farbe, Autotyp Eine Relation ist definiert durch ein Relationenschema R(A1 : D1 , . . . , An : Dn ) bestehend aus dem Relationennamen R, den Attributnamen Ai und den Domänennamen Di . Die Extension einer Relation ist die Menge der momentanen Instanzen. Sie muss dem Relationenschema genügen und kann sich durch Operationen (Einfügen, Löschen) ändern. Beispiel: • Domäne ID Typ = { rot, grün, blau, gelb } • Domäne Farbpalette = { rot, grün, blau, gelb } • Domäne Autotypen = { VW, Opel, Mercedes } • Relationenschema Auto(ID : ID Typ, Farbe : Farbpalette, Typ : Autotyp) 3 1. Das Relationale Modell Ein Datenbankschema ist die Menge aller Relationenschemata. Eine Relationale Datenbank ist ein Datenbankschema und alle Extensionen der zugehörigen Relationen. Jedes Tupel kann als Abbildung µ : {A1 , . . . , An } → D1 ∪ . . . ∪ Dn aufgefasst werden mit µ(Ai ) → d ∈ Di Beispiel: • µ1 = (007, grün, Mercedes) ∈ R • µ1 (ID) = 007 Sei S ⊆ {A1 , . . . , An } Teilmenge des Relationenschemas R. Verallgemeinert man den Abbildungsgedanken für Tupel, so bezeichnet µ[S] die Werte des Tupels µ in den Attributen Ak ∈ S. Beispiel: µ1 [ID,Typ] = (007, Mercedes) Ein Schlüsselkandidat (bzw. Schlüssel) von R ist jede Teilemenge K ⊆ {A1 , . . . , An } der Attributmenge von R mit: • Eindeutigkeit: Für je zwei Tupel µ1 , µ2 gilt: µ1 6= µ2 ⇒ µ1 [K] 6= µ2 [K] • Minimalität: Es gibt kein K 0 ⊂ K, das diese Eigenschaft besitzt. Der Primärschlüssel ist ein ausgezeichneter Schlüsselkandidat (Entwurfsentscheidung). Ein Superschlüssel ist eine Teilmenge S ⊆ {A1 , . . . , An } der Attributmenge von R, die einen Schlüsselkandidaten K enthält, d.h. K ⊆ S (jeder Schlüsselkandidat ist auch Superschlüssel). Ein Fremdschlüssel ist wie folgt definiert: • Seien R(A1 , . . . , An ) und S(B1 , . . . , Bn ) zwei Relationenschemata. • Sei F ⊆ {B1 , . . . , Bn } ein Schlüsselkandidat für S. • Ist F ⊆ {A1 , . . . , An }, so heißt F Fremdschlüssel von S in R. 4 2. Entwurf relationaler Datenbanken 2. Entwurf relationaler Datenbanken Wie können relationale DB-Schemata ohne Datenredundanz entworfen werden? Welche Datenabhängigkeiten können auftreten? 2.1. Funktionale Abhängigkeiten (FD) Sei R(A1 , . . . , An ) ein Relationenschema. Sei X, Y ⊆ {A1 , . . . , An }. Y ist genau dann funktional abhängig von X (X → Y ) wenn für alle µ1 , µ2 in der Extension von R gilt: µ1 [X] = µ2 [X] ⇒ µ1 [Y ] = µ2 [Y ] Funktionale Abhängigkeiten sind Aussagen über die Semantik der Daten (Meta- Informationen), die aus der Anwendungswelt abgeleitet sind. Sie sind nicht beweisbar und nicht aus einer aktuellen Extension ableitbar. Aber: Funktionale Abhängigkeiten schränken die möglichen Instanzen in einer Extension ein! Hinweise: • (X → Y ) wird auch als X dominiert Y gelesen • (XY → ZW ) ist gleichbedeutend mit (XY → Z) und (XY → W ) 2.1.1. Logische Folgerbarkeit Sei F eine Menge von funktionalen Abhängigkeiten über R. Eine FD (X → Y ) folgt logisch aus F F |= X → Y wenn für jede Instanz r der Extension von R gilt r erfüllt alle FDs f ∈ F ⇒ r erfüllt X → Y 2.1.2. Die Hülle Die Hülle von F ist definiert durch F + := {X → Y | F |= X → Y } Lemma: F |= X → Y ⇔ X → Y ∈ F + 5 2. Entwurf relationaler Datenbanken 2.1.3. Formale Definition des Schlüssels Sei R(A1 , . . . , An ) ein Relationenschema und F eine Menge von FDs über R. • X ⊆ {A1 , . . . , An } heißt Superschlüssel, wenn gilt X → {A1 , . . . , An } ∈ F + • X heißt Schlüsselkandidat, wenn X minimal mit der genannten Eigeschaft ist (also keine echte Teilmenge X 0 ⊂ X diese Eigenschaft erfüllt). 2.1.4. Armstrong-Kalkül Deduktionsregeln (Herleitungsregeln) dienen der Ableitung neuer FDs aus bereits bekannten. • Vollständig, wenn alle logisch folgerbaren FDs auch hergeleitet werden können. • Korrekt, wenn nur logisch folgerbare FDs hergeleitet werden können und keine falschen FDs. Das Armstrong-Kalkül ist ein logisches Kalkül und besteht aus • einer Menge von Axiomen AX • einem Herleitungsbegriff `, beschrieben durch eine Menge von Deduktionsregeln Die konkreten Axiome und Deduktionsregeln des Armstrong-Kalkül fehlen hier. Lemma: F ` X → Y ⇔ Y ⊆ XF+ 6 2. Entwurf relationaler Datenbanken 2.2. Normalisierung Eine Relation ist in 1. Normalform, wenn alle Attribute atomare Wertebereiche haben. Das heißt zusammengesetzte, mengenwertige oder geschachtelte Wertebereiche sind nicht erlaubt. Eine Relation ist in 2. Normalform, wenn alle Nichtschlüsselattribute voll funktional von jedem Schlüsselkandidaten abhängen. Das bedeutet sie dürfen nicht von einer Teilmenge eines Schlüsselkandidaten abhängen, sondern nur vom ganzen Schlüsselkandidaten. Eine Relation ist in 3. Normalform, wenn für alle FD X → A mit A ∈ / X gilt: A ist Schlüsselattribut oder X ist ein Superschlüssel für A. Diese Definition für die 3. Normalform wurde direkt aus den Vorlesungsfolien entnommen, da es teils widersprüchliche Definitionen in der externen Literatur und den Praktikumsfolien gab. Die obige Definition sollte also die korrekte sein. Eine Relation ist in Boyce-Codd-Normalform, wenn alle Attribute nur direkt von einem (oder mehreren) Schlüsselkandidaten abhängen. 7 3. Relationale Anfragesprachen 3. Relationale Anfragesprachen 3.1. Operationen der Relationalen Algebra 3.1.1. Grundoperationen • Vereinigung • Differenz • Kartesisches Produkt • Projektion • Selektion 3.1.2. Weitere Operationen • Durchschnitt • Division (Simulation des All-Quantor) • Join (mit Condition) • Natural-Join • Semi-Join 8 3. Relationale Anfragesprachen 3.2. Logik als Anfragesprache - der Relationenkalkül 3.2.1. Well-Formed-Formula (WFF) • jede atomare Formel • wenn F1 und F2 WFFs sind, dann auch F1 ∧ F2 und F1 ∨ F2 • wenn F eine WFF ist, dann auch (F ) und ¬F • wenn F eine WFF ist und x ∈ F V (F ), dann auch ∃x(F ) und ∀x(F ) F heißt geschlossen, wenn F V (F ) = ∅. Sonst heißt F offen. 3.2.2. Interpretation von WFFs • Prädikate p = Relationen mit Namen P • Konstanten sind Werte der jeweiligen Domäne • θ sind ausführbare arithmetische Vergleiche (wie op) 3.2.3. Abbildung von WFF auf Wahrheitswerte W W : WFF ⇒ {true, false} Definition: • W (p(c1 , . . . , cn )) := true, wenn (c1 , . . . , cn ) ∈ p, sonst false • W (c op d) := Ergebnis des Vergleichs“ mit op ∈ {=, 6=, ≥, >, ≤, <} ” • W (F1 ∧ F2 ) = W (F1 ) ∧ W (F2 ) • W (F1 ∨ F2 ) = W (F1 ) ∨ W (F2 ) • W (¬F ) = ¬W (F ) • W (∃x(F ) = W (F (x/d1 )) ∨ . . . ∨ W (F (x/dn )) mit di aus der Domäne {di , . . . , dn } • W (∀x(F ) = W (F (x/d1 )) ∧ . . . ∧ W (F (x/dn )) mit di aus der Domäne {di , . . . , dn } Achtung: Der Wahrheitswert einer WFF kann von der zugrundeliegenden Domäne abhängen! 3.2.4. Das Domänenkalkül Sei F (X1 , . . . , Xn ) eine WFF. Der Ausdruck {(X1 , . . . , Xn ) : F (X1 , . . . , Xn )} ist eine Domänenkalkülanfrage (oder auch DRC-Query) mit der Antwortrelation rF = {(a1 , . . . , an ) : W (F (a1 , . . . , an )) = true } 9 3. Relationale Anfragesprachen 3.2.5. RA nach DRC (am Beispiel) Relationaler Ausdruck: ΠStName (σHörsaal = HS1 (Prüfung o n Beteiligt)) DRC-Query: FE = ∃P r ∃H ∃T ∃P (Prüfung(P r, H, T ) ∧ Beteiligt(P r, ST N, P ) ∧ (H = HS1)) rF = {(ST N ) : W (FE (ST N )) = true } Alle Variablen, die nicht im Ergebnis erscheinen soll werden durch ∃ quantifiziert. 3.2.6. Beschränkte Variablen in WFFs Sei F = F1 ∧ . . . ∧ Fn eine konjunktive WFF. X heißt beschränkt, falls es ein Fi gibt, so dass eine der folgenden Bedingungen erfüllt ist: 1. X ∈ F V (Fi ) und Fi ist eine nicht negierte atomare Formel der Form p(t1 , . . . , X, . . . , tn ) 2. Es gilt: Fi ≡ (X = a) oder Fi ≡ (a = X) mit a als Konstante. 3. Es gilt: Fi ≡ (X = Y ) oder Fi ≡ (Y = X) für eine beschränkte Variable Y ∈ F V (F ). 3.2.7. Sichere (safe) DRC-Formeln Eine Formel F heißt sicher (safe), falls gilt: 1. Es gibt keinen All-Quantor in F. 2. Bei jedem OR-Operator in F, der zwei Teilausdrücke F1 ∨F2 verbindet, muss gelten: F V (F1 ) = F V (F2 ) 3. Die freien Variablen jeder maximalen konjunktiven Teilformel F1 ∧ . . . ∧ Fn von F sind beschränkt. 4. Die Negation darf nur in solchen Konjunktionen auftreten, in denen mindestens ein Fi nicht negiert ist. Maximale konjunktive Teilformeln sind alle Teilformeln einer durch “∧“ verbundenen Kette. 10 4. Anfragebearbeitung 4. Anfragebearbeitung 4.1. Gesetze zur Optimierung Seien E1 und E2 Ausdrücke der relationen Algebra. E1 und E2 heißen äquivalant, falls sie die gleichen Operanden (Selektion, Join, Produkt, . . . ) benutzen und für beliebige Instanziierungen die gleiche Antwortrelation berechnen. 4.1.1. Joins und Produkte Kommutativität: E1 o nCond E2 ≡ E2 o nCond E1 E1 × E2 ≡ E2 × E1 Assoziativität: (E1 o nCond1 E2 ) o nCond2 E3 ≡ E1 o nCond1 (E2 o nCond2 E3 ) (E1 × E2 ) × E3 ≡ E1 × (E2 × E3 ) 4.1.2. Projektion und Selektion Kaskade von Projektionen: Π{B1 ,...,Bm } Π{A1 ,...,An } (E) ≡ Π{B1 ,...,Bm } (E) falls {B1 , . . . , Bm } ⊆ {A1 , . . . , An } Kaskade von Selektionen: σCond1 (σCond2 (E)) ≡ σCond2 (σCond1 (E)) ≡ σCond1∧Cond2 (E) Vertauschen (1): Π{A1 ,...,An } (σCond (E)) ≡ σCond (Π{A1 ,...,An } (E)) falls in Cond nur Attribute A1 , . . . , An auftreten. Vertauschen (2): Π{A1 ,...,An } (σCond (E)) ≡ σCond (Π{A1 ,...,An ,B1 ,...,Bm } (E)) falls in Cond die Attribute A1 , . . . , An und B1 , . . . , Bm auftreten. 11 4. Anfragebearbeitung 4.1.3. Selektion und Join Vertauschen (Join): σCond (E1 o nCond1 E2 ) ≡ σCond (E1 ) o nCond1 E2 falls in Cond nur Attribute aus E1 auftreten. Vertauschen (Natural Join): σCond (E1 o n E2 ) ≡ σCond (E1 ) o n σCond (E2 ) 4.1.4. Selektion und Vereinigung / Differenz Vertauschen: σCond (E1 ∪ E2 ) ≡ σCond (E1 ) ∪ σCond (E2 ) σCond (E1 \ E2 ) ≡ σCond (E1 ) \ σCond (E2 ) 4.1.5. Projektion und Join Vertauschen: Π{A1 ,...,An ,B1 ,...,Bm } (E1 o nCond E2 ) ≡ Π{A1 ,...,An } (E1 ) o nCond Π{B1 ,...,Bm } (E2 ) falls in Cond nur Attribute A1 , . . . , An und B1 , . . . , Bm auftreten und A1 , . . . , An nur in E1 und B1 , . . . , Bm nur in E2 auftritt. 4.1.6. Projektion und Vereinigung Vertauschen: Π{A1 ,...,An } (E1 ∪ E2 ) ≡ Π{A1 ,...,An } (E1 ) ∪ Π{A1 ,...,An } (E2 ) falls A1 , . . . , An Attribute in E1 bzw. E2 sind. 4.1.7. Selektion und Produkt Zusammenfassen zum Join: σCond (E1 × E2 ) ≡ E1 o nCond E2 falls Cond von der Form (A op B) ist und A in E1 und B in E2 als Attribut auftritt. 12 4. Anfragebearbeitung 4.1.8. Umschreiben eines Produktes (E1 × . . . × En ) ≡ (((E1 × E2 ) × E3 ) . . . × En ) und alle möglichen Permutationen. 4.2. Beispiel für eine Optimierung ΠBetreut.PrName, Betreut.StName (σCond (Betraut × Beteiligt × Prüfung)) mit Cond = (Betreut.StName = Beteiligt.StName) and (Beteilgt.Pr = Prüfung.Pr) and (Prüfung.Hörsaal = HS1) and (Prüfung.Datum < 31.12.1994) 4.3. Nested-Loop-Join Pseudocode: FOR EACH r in R DO FOR EACH s in S DO IF(r.B = s.B) THEN OUTPUT (r,s) END IF NEXT NEXT Kostenbetrachtung: TR , TS := Anzahl der Tupel von R bzw. S PR , PS := Anzahl der Seiten von R bzw. S βR = βS = PR TR PS TS Ro nS : So nR: (Tupel pro Seite von R) (Tupel pro Seite von S) PR + TR · PS = PR + TR · βS · TS = PR + βS · TR · TS PS + TS · PR = PS + TS · βR · TR = PS + βR · TR · TS PR + βS · TR · TS ≈ βS PS + βR · TR · TS ≈ βR Ro n S wenn βS < βR und sonst S o n R. 13 5. Speicherstrukturen 5. Speicherstrukturen 5.1. B-Baum B-Bäume minimieren die Anzahl der wahlfreien Zugriffe unter Ausnutzung der charakteristischen Eigenschaften des Hintergrundspeichers. Sie speichern pro Baumknoten eine variable Anzahl von Schlüsseln (statt nur eines einzelnen Schlüssels beim Binärbaum). Mit der Schlüsselanzahl steigt auch die Anzahl der Verweise auf Kindknoten pro Knoten (der Verzweigungsgrad) auf eine variable Anzahl mit festgelegtem Schwankungsbereich von minimal t und maximal 2t (gegenüber zwei beim Binärbaum). Der Parameter t ist wählbar und wird verwendet, um die Datenstruktur so an die Blockgröße des Speichermediums anzupassen, dass ein Baumknoten maximal gerade einen kompletten Block des Speichermediums belegt. Der große Verzweigungsgrad reduziert die Baumhöhe und damit die Anzahl der kostspieligen wahlfreien Zugriffe. Die variable Schlüsselmenge pro Knoten vermeidet häufiges Balancieren des Baumes. Alle Knoten außer der Wurzel haben • mindestens t − 1 und höchstens 2t − 1 Schlüssel • und entsprechend mindestens t und höchstens 2t Kindverweise Die Wurzel hat • mindestens 1 und höchstens 2t − 1 Schlüssel, wenn der Baum nicht leer ist • und entsprechend mindestens 2 und höchstens 2t Kindverweise, wenn die Höhe des Baumes größer 0 ist Eine ausführliche Beschreibung ist in Wikipedia vorhanden: http://de.wikipedia.org/wiki/B-Baum 5.2. B*-Baum Der B*-Baum ist eine Erweiterung des B-Baumes. Bei einem B*-Baum werden die eigentlichen Datenelemente nur in den Blattknoten gespeichert, während die inneren Knoten lediglich Schlüssel enthalten. Dadurch kann der Verzweigungsgrad erhöht und damit die Baumhöhe verringert werden, weil in den Indexknoten mehr Platz zur Verfügung steht. 14 6. Transaktionskonzept 6. Transaktionskonzept Ein Ablaufplan (Schedule) ist eine Folge von Aktionen, die durch Überlappung der Einzelaktionen unter Beibehaltung der Reihenfolgen innerhalb jeder einzelnen Transaktion ensteht. Ein serieller Schedule ist ein Ablaufplan in dem sich Transaktionen nicht überlappen. Eine Transaktion beendet alle ihre Operationen bevor eine andere Transaktion mit ihren Operationen beginnt. Ein Ablaufplan heißt serialisierbar, falls seine Wirkung äquivalent zu der Wirkung eines seriellen Schedule ist. Ziel: Nur serialisierbare Schedules im DB-System zulassen. Als Concurrency Control bezeichnet man Protokolle der Zugriffskontrolle im Mehrbenutzerbetrieb. 6.1. 2-Phasen-Sperrprotokoll (2PL) Regeln: • vor dem Lesen eines Objekt X muss die TA eine Lesesperre auf diesem Objekt besitzen • vor dem Schreiben eines Objekt X muss die TA eine Schreibsperre auf diesem Objekt besitzen • eine TA behält ihre Sperren bis zu ihrem Ende • 2 TA können nicht gleichzeitig unverträgliche Sperren auf dem gleichen Objekt besitzen (nur mehrfache Schreibsperren auf gleichem Objekt sind verträglich) Bemerkungen: • erzeugt nur serialisierbase Schedules • verschiedene Variationen (bezogen auf die Anzahl der Lese- und Schreiboperationen) • Deadlocks zwischen Transaktionen sind möglich 15 6. Transaktionskonzept 6.2. Fehlererholung Im Fehlerfall müssen Transaktionen zurückgesetzt werden und es muss die zuletzt gültige Version in der Datenbank wiederhergestellt werden. Möglicherweise geht der Inhalt des Hauptspeichers verloren. In diesem Fall müssen genug Informationen bereitstehen um die Datenbanken wieder in einen konsistenten Zustand zu überführen. Dazu werden auf einem Sekundärspeicher Informationen zur Fehlererholung angelegt. Dabei werden die durch eine Transaktion veränderten Daten in einem Log gespeichert (alte und neue Werte). Dieser Log dient auch der Archivierung (gesicherter Zustand + Log = aktueller Zustand) und als Nachweis wer wann was verändert hat (gesetzliche Gründe). Ablauf eines Fehlererholungsalgorithmus: 1. Normalbetrieb: • beim Schreiben eines Wertes X: Schreibe alten und neuen Wert von X als Log-Record in das Log • beim EOT: Sicherstellen, dass alle Log-Records auf Platte geschrieben wurden und schreibe COMMIT als Log-Record in das Log 2. Transaktionsfehler: • lies Log und trage alten Wert für Operationen ein, die von der TA ausgeführt wurden • füge ein ABORT in das Log ein 3. Systemfehler: • lies das Log und bestimme die Menge der aktiven Transaktionen (kein COMMIT) und die Menge der abgeschossenen Transaktionen (COMMIT vorhanden) • alle aktiven TA werden abgebrochen • die neuen Werte der abgeschlossenen TA werden in die DB eingetragen 16 7. XML 7. XML Eine Document Type Definition (DTD) legt die Struktur eines XML-Dokuments rein syntaktisch fest (ähnlich einem Datenbankschema). 7.1. DTD für ein Adressbuch <!DOCTYPE addressbook [ <!ELEMENT addressbook (projekt*)> <!ELEMENT projekt (name, greet?, address*, (fax | tel)*, email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT greet (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT fax (#PCDATA)> <!ELEMENT tel (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> 7.2. Die Verwendung von ID und IDREF <!DOCTYPE db [ <!ELEMENT db (movie*, actor*)> <!ELEMENT movie (title, director, cast, budget)> <!ELEMENT actor (name, actedIn)> <!ELEMENT title (#PCDATA)> <!ELEMENT director (#PCDATA)> <!ELEMENT budget (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ATTLIST cast id ID #REQUIRED> <!ATTLIST actedIn idrefs IDREF #IMPLIED> ]> • #REQUIRED bedeutet auf jeden Fall festzulegen und #IMPLIED bedeuted optional • falls ein Attribut als ID definiert ist müssen alle assoziierten Werte unterschiedlich sein • falls ein Attribut als IDREF definiert ist müssen die vergebenen Werte als ID eines Attributes existieren (IDREFs spezifiziert Null oder mehr IDs) • ID und IDREF sind nicht getypt 17 7. XML Eine Instanz der DTD könnte dann so aussehen: <db> <movie id=’m1’> <title>Waking Ned Devine</titel> <director>Kirk Jones III</director> <cast idrefs=’a1 a3 a12’></cast> <budget>100,000</budget> </movie> .. . <actor id=’a1’> <name>David Kelly</name> <actedIn idrefs=’m1 m78’></actedIn> </actor> <actor id=’a3’> <name>Ian Bannen</name> <actedIn idrefs=’m1 m35’></actedIn> </actor> .. . </db> 18 A. Algorithmen A. Algorithmen A.1. Die Hülle (bezüglich einer Attributmenge) Eingabe: FD-Menge F und Attributmenge X Ausgabe: Hülle von F bezüglich X (XF+ ) Methode: Solange es noch eine FD A → B gibt, bei der A in meiner Hülle enthalten ist und B noch nicht, dann nehme B in die Hülle mit auf. Beispiel: R = {A, B, C, D, E} F = {(AB → C), (B → D), (D → E)} X = {A, B} Schrittweise Berechnung der Hülle: 1. XF+ = X ∪ {C} ∪ {D} = {A, B, C, D} 2. XF+ = XF+ ∪ {E} = {A, B, C, D, E} A.2. Schlüsselkandidaten bestimmen Eingabe: FD-Menge F und Attributmenge V = {A1 , . . . , An } Ausgabe: Ein Schlüsselkandidat K ⊆ V . Methode: • Zunächst ist V selbst der Schlüssel, also K = V (trivial). • Gehe nacheinander alle Attribute Ai ∈ V durch und prüfe ob V = (K \ {Ai })+ F. • Wenn ja, dann setze K = K \ {Ai }. Problem: Wenn man alle Schlüsselkandidaten bestimmen will, so dauert die Berechnung mit dem vorgestellten Algorithmus viel zu lange. Man kann unmöglich alle Teilmengen von V auf Schlüsselkandidaten untersuchen. Deshalb muss die Menge der zu untersuchenden Schlüsselkandidaten eingeschränkt werden. 19 A. Algorithmen Dazu soll der folgende Algorithmus dienen: • Falls ein Attribut niemals auf der rechten Seite einer FD steht, dann muss es in allen Schlüsselkandidaten enthalten sein. • Untersuche alle X mit (X → Y ) ∈ F . • Für alle echten Teilmengen Z ⊂ X von X, prüfe ob es eine FD (U → Z) ∈ F gibt. Falls ja, dann untersuche auch U ∪ (X \ Z). Beispiel: V = {A, B, C, D, E, F } F = {(AC → EF ), (BC → AD), (DEF → C)} Alle Schlüsselkandidaten müssen B enthalten! Folgende Mengen müssen nun auf Schlüsselkandidaten untersucht werden: • ACB, BC, DEF B • BDEF wegen (BC → AD) und (DEF → C) • ADEF B wegen (AC → EF ) und (DEF → C) Aber: BDEF ⊆ ADEF B, also überflüssig • DACB wegen (AC → EF ) und (DEF → C) Aber: BC ⊆ DACB, also überflüssig • CBC wegen (AC → EF ) und (BC → A) Aber: CBC = BC, also überflüssig • BCEF wegen (BC → D) und (DEF → C) Aber: BC ⊆ BCEF , also überflüssig Ergebnis: Die Schlüsselkandidaten sind BC und BDEF. Diese Vorgehensweise erscheint nicht in den Vorlesungsfolien. Die Benutzung erfolgt deshalb auf eigene Gefahr! 20 A. Algorithmen A.3. Basis bzw. minimale Überdeckung Eingabe: Menge F von FDs Ausgabe: Basis FC von F Beispiel: F = {(A → B), (B → C), (A → C), (AB → C), (A → BC)} Methode: Untersuche alle funktionalen Abhängigkeiten (α → β) ∈ F : 1. Linksreduktion: • Prüfe welche Attribute A ∈ α überflüssig sind. • Entferne A, falls β bereits in der Hülle von F über α \ A enthalten ist, d.h. falls gilt β ⊆ (α \ A)+ F. • im Beispiel ist das B in (AB → C) überflüssig, weil C ⊆ A+ F = {A, B, C} 2. Rechtsreduktion • Prüfe welche Attribute B ∈ β überflüssig sind. • Entferne B, falls B bereits in der Hülle von F \ (α → β) ∪ (α → β \ B) über α enthalten ist, d.h. falls gilt B ⊆ αF+\(α→β)∪(α→β\B) . • im Beispiel ist das B in (A → BC) überflüssig, weil B ⊆ {A, B, C} 3. Entferne alle überflüssigen funktionalen Abhängigkeiten X → ∅. 4. Fasse (α → β), (α → γ) zusammen zu (α → β, γ). 21 A. Algorithmen A.4. Lossless-Join-Zerlegung Eine Lossless-Join-Zerlegung ist eine Zerlegung eines Relationenschema, so dass dabei keine Informationen verloren gehen. Test auf Informationserhaltung Eingabe: ein Relationenschema R(A1 , . . . , An ), eine Zerlegung p = {R1 , . . . , Rk } und eine Menge F von FDs Ausgabe: True, falls p eine Lossless-Join-Zerlegung ist, False sonst. Methode: 1. Hilfstabelle konstruieren: Attribute A1 , . . . , An 1 ... n Zerlegungen p = {R1 , . . . , Rk } 1 ... k rij rkn rij = aj , falls A ∈ Ri rij = bij , falls A ∈ / Ri 2. Wähle (X → Am ) ∈ F . Wiederhole bis keine Änderungen mehr erfolgen: Falls in zwei Zeilen i1 und i2 die Werte von X übereinstimmen, dann setze die Werte von Am wie folgt: Falls i1 = am dann i2 := am , falls i2 = am dann i1 := am , sonst i1 := i2 . 3. Falls es eine Zeile (a1 , . . . , an ) gibt, dann gibt True zurück, sonst False. 22 A. Algorithmen Beispiel: R := (Pr, Datum, Hörsaal, StName, Platz) R1 := (Pr, Datum, Hörsaal) R2 := (Pr, StName, Platz) p := {R1 , R2 } F := {(Pr → Datum), (Pr → Hörsaal), (Pr,StName → Platz)} nach Schritt 1: R1 R2 Pr a1 a1 Datum a2 b22 Hörsaal a3 b23 StName b14 a4 Platz b15 a5 Hörsaal a3 b23 StName b14 a4 Platz b15 a5 Hörsaal a3 a3 StName b14 a4 Platz b15 a5 nach Schritt 2: (Pr → Datum) ∈ F R1 R2 Pr a1 a1 Datum a2 a2 (Pr → Hörsaal) ∈ F R1 R2 Pr a1 a1 Datum a2 a2 nach Schritt 3: True 23 A. Algorithmen A.5. Dekomposition Verlustlose Zerlegung eines Relationenschemas R in Teilrelationen, die in BCNF sind. Die Abhängigkeitserhaltung ist nicht gewährleistet! Eingabe: Menge Z = {R} Ausgabe: Menge Z = {R1 , . . . , Rn } Solange noch Ri ∈ Z existieren, die nicht in BCNF sind, wiederhole folgendes: • Falls gilt: es gibt eine FD α → β in Ri mit α ∩ β = ∅ und ¬(α → Ri ). • Dann zerlege Ri in Rj = α ∪ β und Rk = Ri \ β. • Rj erhält die funktionellen Abhängigkeiten F Dj := {X → Y | X ∪ Y ⊆ Rj } und entsprechendes gilt für die funktionellen Abhängigkeiten F Dk von Rk . • Entferne Ri aus Z und füge Rj und Rk ein. A.6. Synthese Verlustlose und abhängigkeitserhaltende Zerlegung eines Relationenschemas R in Teilrelationen, die in 3. NF sind. Eingabe: Menge Z = {R} Ausgabe: Menge Z = {R1 , . . . , Rn } Methode: • Bestimme die Basis Fc zu F . • Für jede FD (α → β) ∈ Fc : – Erzeuge Relationenschema Ri = α ∪ β. – Ri erhält die funktionellen Abhängigkeiten F Di := {X → Y | X ∪ Y ⊆ Ri } • falls der Schlüsselkandidat k von R bezüglich Fc in keiner der Relationen Ri enthalten ist, dann: – Neues Relationenschema Rk := k – F Dk := ∅ • Elimiere Relationenschemata, die in anderen enthalten sind. 24 B. Prüfungsfragen B. Prüfungsfragen Dieses Kapitel ist keinesfalls vollständig und dient nur als Ergänzung zu den Prüfungsfragen aus dem Skript von N. Lohmann (WS 04/05). Sie sollten sich also beides ansehen! B.1. ER-Modell Gegeben sind Instanzen von Entitäten und Beziehungen (als Mengen). A = {A1 , A2 , A3 } D = {D1 , D2 , D3 } B = {B1 , B2 } E = {E1 , E2 } Bez1 = {(A1 , D2 ), (A2 , D3 ), (A3 , D1 )} Bez3 = {(C1 , F2 ), (C1 , F3 )} C = {C1 } F = {F2 , F3 } Bez2 = {(B1 , C2 , E1 ), (B2 , C2 , E1 )} Aufgaben: 1. Eintragen in ein ER-Model (siehe Abbildung) 2. Welche Constraints gelten für die Generalisierung? (Hinweis: Wenn in den Instanzmengen der Spezialisierungen Elemente Ei und Fj mit i = j auftreten dann bedeutet das Overlapping! Dieser Sachverhalt war in der Klausur etwas komisch beschrieben und deshalb hab ich das leider nicht mitbekommen.) 3. Umformen in ein Relationales Modell 25 B. Prüfungsfragen Hinweis zur Umformung in ein Relationales Modell: Sollte die folgende Form einer Beziehung vorliegen: Dann kann man diese in ein einziges Relationenschema umformen: AD(h,g,o,p) B.2. Funktionale Abhängigkeiten • Was ist eine Lossless-Join-Zerlegung und was ist eine abhängigkeitserhaltende Zerlegung? • Wie heißt der Algorithmus zur Zerlegung eines Relationenschema in 3. NF? • Wie heißt der Algorithmus zur Zerlegung eines Relationenschema in BCNF? B.3. Relationale Algebra • Was versteht man unter einer minimalen Menge? Lösung: Eine minimale Menge ist eine Menge von Basisoperatoren aus denen alle anderen Operatoren gebildet werden können. • Eine minimale Menge angeben! • Operatoren nur mit Hilfe anderer Operatoren der RA darstellen (z.B. für die Operatoren Durchschnitt und Division) • Join-Graphen für gegebene Join-Reihenfolgen zeichnen und benennen • Gegeben ist eine Anfrage im DRC mit einer WFF. – Beschreiben Sie in einem deutschen Satz was diese Anfrage macht. – Ist die WFF sicher oder nicht sicher? Begründen Sie! 26 B. Prüfungsfragen • Gegeben ist der Pseudocode für einen Nested-Loop-Join. Geben sie den Pseudocode für einen Semi-Join (R semi-join S) an (auf der Seite von R ist das Join-Symbol geschlossen und bei S ist es offen - kann man hier leider nicht darstellen). Dabei gibt es eine kleine Falle. Deshalb hier die Lösung: FOR EACH r in R DO FOR EACH s in S DO IF(r.B = s.B) THEN OUTPUT (r) BREAK END IF NEXT NEXT Sehr wichtig ist es das BREAK nicht zu vergessen, weil sonst r wiederholt ausgegeben wird, falls mehrere Join-Partner s existieren! B.4. SQL Gegeben ist die Struktur von mehreren Tabellen in DDL. • Welche Bedeutung haben die folgenden Constraints für Einträge in den jeweiligen Tabellen: – PRIMARY KEY(x,y) – FOREIGN KEY station REFERENCES station(name) • SQL-Anfragen formulieren. Dazu muss u.a. folgendes verwendet werden: Kartesisches Produkt, GROUP-BY mit HAVING und Sub-Queries (Unterabfragen) B.5. B-Baum Bei den Aufgaben zum B-Baum hatte ich nur 3 von 10 Punkten. Das, was ich auf Wikipedia dazu gelesen hatte, konnte ich irgendwie nicht so richtig umsetzen. • Zwei Eigenschaften von B-Bäumen nennen. • Wo finden Einfügeoperationen in einem B-Baum statt? (die Antwort in den Kno” ten“ fanden die nicht so toll) • Gegeben ist die Höhe (h) und Breite (k) eines B-Baum. Wieviele Schlüssel kann der Baum maximal enthalten? • Entfernen eines Elements aus einem B-Baum. 27 B. Prüfungsfragen • Einfügen eines neuen Elements in einen B-Baum: 1. mit Einbeziehen des freien Platzes in Nachbarknoten 2. ohne Einbeziehen ... Tja, hier wusste ich nicht so recht was die vom mir wollten. Punkt 1 hatte ich richtig und den Punkt 2 wusste ich nicht. B.6. XML Eine Aufgabe aus der Klausur: <!DOCTYPE db [ <!ELEMENT db (flug | fluggesellschaft)*> <!ELEMENT fluggesellschaft (name, kurzel)> <!ELEMENT flug (flugnr, gesellschaft, start, ziel, uhrzeit)> <!ELEMENT name (#PCDATA)> <!ELEMENT flugnr (#PCDATA)> <!ELEMENT gesellschaft (#PCDATA)> <!ELEMENT start (#PCDATA)> <!ELEMENT ziel (#PCDATA)> <!ELEMENT uhrzeit (#PCDATA)> <!ATTLIST start iaca code CDATA #REQUIRED> <!ATTLIST ziel iaca code CDATA #REQUIRED> <!ATTLIST name www CDATA #IMPLIED> ]> • Fehler in einem XML-Dokument finden, d.h. Widersprüche zur DTD finden (hier nicht gegeben). • ID und IDREF so in die DTD einfügen, dass gilt: – kuerzel identifiziert eindeutig eine fluggesellschaft – flugnr identifiziert eindeutig einen flug – gesellschaft ist Fremdschlüssel von fluggesellschaft in flug • Die XML-DTD in ein Relationenschema transformieren. Folgendes muss gelten: – die gegebenen Constraints durch Schlüssel und Fremdschlüssel werden eingehalten – das Attribut aca code legt eindeutig den Start- und Zielflughafen fest (Attribute start und ziel) – das Relationenschema befindet sich in 3. Normalform 28 B. Prüfungsfragen Ein Ansatz zur Umformung in ein Relationenschema: fluggesellschaft(name, kuerzel, www) flug(flugnr, gesellschaft, start iaca code, ziel iaca code, uhrzeit) FOREIGN KEY gesellschaft REFERENCES fluggesellschaft(kuerzel) FOREIGN KEY start iaca code REFERENCES flughafen(iaca code) FOREIGN KEY ziel iaca code REFERENCES flughafen(iaca code) flughafen(iaca code, name) Achtung: Keine Garantie auf Korrektheit! Also bitte nachprüfen. B.7. Transaktionen • Für welche Eigenschaften von ACID ist der Recovery-Manager bzw. der Concurrency-Control-Manager verantwortlich? Lösung: – Recovery-Manager ist verantwortlich für Durability und Consistency – Concurrency-Control-Manager ist nur verantwortlich für Isolation • Die vier Regeln des 2-Phasen-Sperrprotokoll nennen. • Ist ein gegebener Schedule serialisierbar? Man soll begründen! Ich hatte hier sowas geschrieben wie: T1 hat bereits Lesesperre auf X, dann kann T2 keine Schreibsperre anfordern Dafür gabs 0 Punkte und den Kommentar Das ist nicht die Begründung!“. ” 29