©2005, Holger Hartmann Datenbanken Wintersemester 2004/2005 Prof. Dr. Laue Zusammenfassung keine Gewähr für Korrektheit! Datenbank: Sammlung von Daten die miteinander in Beziehung stehen und in einer bestimmten Struktur vorliegen. 3-Ebenen-Modell: – Anwendersicht spezielle Sichten stellen Ausschnitte aus der Gesamheit der Daten dar – Logische Ebene (Datenbanksystem) Gesamtmodell aller Daten des Unternehmens – physikalische Ebene (Massenspeicher) beinhaltet Aufteilung der Daten, Zugriffswege, Zugriffsrechte ... Ebenen müssen unabhängig voneinander sein Entity-Relationship-Model: Entities: Objekte der realen Welt, E Entity-set: Zusammenfassung von Objekten des gleichen Typs, E Attribute: Eigenschaften oder Merkmale von Objekten , A1, ..., An jedem wird ein Wertebereich zugeordnet: D(Ai) jedes Entity E aus E wird beschrieben durch (e1, ..., en), wobei ei ∈ D(Ai) Entities eines Entitiy-sets haben die gleichen Attribute Schlüssel: minimale Menge von Attributen, deren Einträge ein Objekt bereits festlegen also minimales S ⊆ A={A1, ... , An } die ein Objekt festlegen Primärschlüssel: spezieller Schlüssel Sekundärschlüssel: Schlüssel die nicht Primärschlüssel sind Beziehung: zwischen E1 , ..., En ist eine Teilmenge E1 x...x En , also gewisse Tupel (E1 ,..., En) Entity-Relationship-Diagramm: Attribute = Kreise Entity-Sets = Rechtecke Beziehungen = Rauten Schlüsselattribute werden unterstrichen (1,n)-Beziehung: Zu jedem Entitiy aus E2 gehört höchstens ein Entity aus E1 (n,m)-Beziehung: Es dürfen mehrere Entities aus E2 zu mehreren Entites aus E2 in Beziehung sein is-a-Beziehung: Jedes Entity aus E1 ist spezialisierung eines Entites aus E2 Datenmodelle: 1. Netzwerk besteht nur aus Entitiy-Sets mit (1-n)-Beziehungen Datenstruktur: Zeigerketten Owner-Typ: Entity-Set mit 1 Member-Typ: Entity-Set mit n Darstellung durch Bachmann-Diagramm: (1-n)-Beziehungen werden durch einen Pfeil dargestellt, Entity-Sets durch ein Rechteck (n-m)-Beziehungen müssen zu einer (1-n) und einer (1-m) Beziehung aufgelöst werden Bewertung: + schneller Zugriff über Zeigerketten, – erfüllt nicht das 3-Ebenen-Modell, da Zugriffsmethoden von der Speichermethode abhängig ist --> Anfrage erfolgt auf physikalischer Ebene und nicht auf logischer. 2. Hierarchisches Datenmodell Datenstruktur: Bäume, wobei die Entity-Sets die Knoten sind. Es gibt nur (1-n)-Beziehungen, die Member-Typen sind die Söhne der Owner-Typen. Tritt ein Entity-Set in mehreren Beziehungen auf, werden virtuelle Kopien erzeugt. Kopien werden nie für Owner-Typen der Beziehungen eingesetzt Bewertung: + schneller Zugriff bezüglich der jeweiligen Hierarchie – langsamer Zugriff anhand von Eigenschaften (sind in Blätter beschrieben) – hohe Abhängigkeit der Anwenderprogramme von der Speicherung --> 3-Ebenen-Modell wird nicht ausreichend genutzt 3. Relationales Modell vermeidet Zeiger. Die Beziehungen werden wie Entities behandelt Datenstruktur: Tabelle Spalten tragen Attributnamen (A1,A2, ..., An), Zeilen sind Wertetupel Tupel t = (a1, a2, ..., an) hat in der i-ten Spalte einen Eintrag ai aus dem Wertebereich von Ai Auf die Tabellen können folgende Operationen angewendet werden: Schnitt, Vereinigung, Differenz, Projektion, Selektion, natürlicher Verbund, θ-Verbund Die Projektion der Tabelle auf die Attribute Ai , ... , Ai wird mit i ,... ,i T bezeichnet Die Selektion der Tabelle T bez. der Formel F wir mit F T bezeichnet der natürliche Verbund wird mit T1 |><| T2 gekennzeichnet (T1 |><| T2) |><| T3 = T1 |><| (T2 |><| T3) Bewertung: + Datenunabhängikeit nach 3-Ebenen-Modell gewährleistet – bei Verbundoperationen langsamer als die anderen Modelle 1 k 1 k Data Dictionary: Datenbank über Datenbank SYSCATALOG: Tupel für jede Tabelle SYSCOLOUMS: Tupel für jedes Attribut algebraische Optimierung: Selektion unter Verbund im Anfragebaum schieben Projektion unter Verbund schieben, in der Projektion muss das Verbundsattribut mit aufgenommen werden Beschleunigung des Zugriffs durch Indizes: I(Tabelle, Attribut) liefert sortierte TIDs von den Attributen zurück --> Selektionen können schneller durchgeführt werden bei Verbundsoperationen nur linearer Aufwand da entsprechende Attribute sortiert sind Physikalische Ebene: Daten werden blockweise sortiert auf der Platte abgelegt. Index auf Blockanfänge B*-Baum: vollständige Datensätze nur in den Blättern. Indexseiten erhalten neben den Zeigern nur Vergleichswerte B*-Bäume mit Zeigern in Blättern: es werden nur Adressen der Daten gespeichert --> Seiten der Daten könnnen voll ausgenutzt werden --> Speicherersparnis Bei mehreren Zugriffswegen auf Daten gibt es jedoch Probleme beim Löschen 1.Lösung: Löschkennzeichen bei Datensatz --> anderer Zugriffsweg stellt fest das Daten ungültig sind, allerdings Speicherplatzverschwendung, Reorganisation der Datenbank nötig 2.Lösung: eigentliche Datensätze durch Zeiger auf Datensätze ersetzen. --> physikalischer Speicherplatz kann verschoben oder gelöscht werden TID-Konzept (Tupel-Identifier): Datensatz von Adresse besteht aus 2 Teilen: 1. Adresse der Datenseite 2. Nummer der Adresse des Datensatzes in einem Adressfeld auf der Seite auf der Datenseite können statt Datensätze auch wieder TIDS stehen (Überlauf) Dynamisches Hashen: Addresse für Datensatz wird durch Hashfunktion ermittelt bei zu großer Datenmenge (viele Kollisionen) wird die nächste Stelle der Hashadresse hinzugenommen Mehrdimensionale Anfragen: gesucht sind alle Datensätze mit ui ≤ wi < oi bei Datensätzen der Form w = (w1, w2, ..., wk) a) für jede Komponente ein Baum, Problem große Zwischenlösungen wegen Schnitt der Lösungen b) B-Baum für jede Kombination von Attributen, keine überflüssigen Zwischenergebnisse aber bei k Attributen 2k Teilmengen --> nur für spezielle häufig auftretende Anfragen sinnvoll Datensätze werden als Punkte in k-dim Raum interpretiert. Gridfile: Datenraum wird in Quader zerlegt, Punkte in Quader kommen auf eine Datenseite. Bei Suchanfrage wird Suchquader definiert --> es werden nur wenige Daten geholt die nicht zur Anfrage gehören Nachteil: Nur bei statisch bekannten Datensätzen sinnvoll. Raum wird solange zerlegt, bis die Datensätze in den Quadern auf eine Seite passen Nachteil: bei stark korrelierten Daten viele leere Quader, gut bei gleichmäßig verteilten Daten in Raum werden nacheinander Daten eingefügt. Quader wird aufgeteilt wenn zuviele Einträge drin sind. Es wird die Komponente aufgespalten die bei Zerlegung in der Mitte in gleichbelegte Teile zerfällt. Löschen: bei Unterbelegung mit Nachbarn verschmelzen (es muss wieder ein Quader entstehen) Nachteil: Datenbanksystem kann bei manchen Intervallen nicht die Mitte bestimmen Entwurfsstrategie relationaler Datenbanken  = {A1, A2, ..., An) : Attributmenge Relation R besteht aus Menge von Abbildungen von Â, Tupel: Abbildungen einer Relation Format der Relation über Â: F(Â) enthält alle endlichen Relationen von  semantische Bedingung auf Â: γ : F(Â) --> {wahr, falsch} Relationsschema: S(Â, Γ) beinhaltet alle Relationen auf  bei denen Γ erfüllt ist funktionale Abhängigkeiten: z.B. X --> Y : wenn X festgelegt ist, so auch Y Nullwerte: Werte die nicht bekannt sind, werden mit δ gekennzeichnet Achtung: der äußere Verbund ist nicht assoziativ + Γ : Menge funktionaler Abhängigkeiten die von Γ logisch impliziert wird Schlüssel: X ⊆  von S(Â, Γ) heißt Schlüssel, wenn es minimal X -->  bestimmt Schlüssel eines S(Â, Γ) können jedoch unterschiedlich viele Attribute besitzen in Schlüssel dürfen keine NULL-Werte eingetragen werden --> Informationen ohne Wert beim Schlüssel können nicht gespeichert werden --> es werden mehrere Relationsschemata gebildet Datenbankschemata: DS(S1, S2, ..., Sn, Γ), Γ semantische Bedingung auf ( S1, S2, ..., Sn) Beispiel für Schema: ( R1, R2, ..., Rn) ∈ DS Fremdschlüssel: Spalte oder Spaltengruppe die auf den Primärschlüssel in einer anderen Tabelle verweist Universalrelationbedingung γUR: wird erfüllt wenn ein R∈S(Â, Γ) existiert, mit π(R) = (R1, R2, ..., R3), Ri = πÂi(R), die Relationen also aufgeteilt werden können --> Datenbankschemata werden dann mit DS(S1, S2, ..., Sn, {γUR}) bezeichnet verlustloser Verbund: Wenn stets R = |><|i=1n Ri , bzw. die Zerlegung von S(Â, Γ) injektiv ist Algorithmus für Test auf verlustlosen Verbund bei funkitonalen Abhängikeiten: gegeben: S(Â, Γ) und (Â1, Â2,..., Âm) Frage: ist Zerlegung von S(Â, Γ) bezüglich (Â1, Â2,..., Âm) verlustlos? Erstelle Tabelle mit den Zeilen Â1, Â2,..., Âm und den Spalten A1, A2, ..., An Falls das Attribut Ai in der Attributmenge Âj ist, setze ein a in die Tabelle, anderenfalls setze ein bi (i : Zeilennummer) in die Tabelle Durchlaufe Γ mit X--> Y. Falls 2 Zeilen mit gleichen Einträgen bei X existieren, so setze die Einträge auch bei Y gleich (entweder auf a, oder auf den kleineren Index bei b) Wenn alle γi durchlaufen sind und es eine Zeile mit nur a's existiert, ist der Verbund über (Â1, Â2,..., Âm) verlustlos. Armstrong Axiome: A1: Ist Y ⊆ X so gilt X Y A2: Gilt X Y so auch XZ YZ A3: Gilt X Y und Y Z , so auch X Z B1: X X B2: Ist X YC ∈G und Z CW ∈ , dann gilt auch X ZC B3: Gilt X YZ , so auch X Y Ableitungsgraphen: besteht aus Knoten X ⊆  und Pfeilen aus Γ Anfangsmenge: Knotenmenge auf die keine Pfeile zeigen Algorithmus zur Berechnung von X+ : Linclosure gegeben: Menge funktionaler Abhängigkeiten Γ, Attributmenge X ⊆  1. Initialisiere: Lege für jedes Attribut eine Liste an, in welche die FDs eingetragen werden bei denen das Attribut auf der linken Seite steht. Durchlaufe alle diese Listen und erhöhe den counter zu den FDs um 1 ( alle counter mit n Attributen links haben den Wert n) Füge in newdep und update den Schlüssel X ein. Update ist eine FIFO-Warteschlange 2. entnehme Wert aus update und durchlaufe dessen Liste. Senke bei den entsprechenden FDs die counter um 1. Hat eine FD den counter 0, so füge die rechte Seite der FD zu newdep hinzu (falls einer der Wert noch nicht in newdep ist), dieselben Werte werden auch update hizugefügt. 3. Wiederhole Schritt 2 solange noch Werte in update sind gebe dann newdep aus abhängigkeitserhaltend: Eine Abbildung π, die R in (R1, R2, ..., Rn) zerlegt und bei der jedes zurückverknüpfte R alle ∈ erfüllt --> bei abhängigkeiteserhaltenden Zerlegungen brauchen nur die lokalen Γi überprüft werden, um sicherzustellen, dass das globale R alle ∈ erfüllt π abhängigkeitserhaltend <=> π surjektiv π hat verlustlosen verbund <=> π injektiv äquivalenz funkitonaler Abhängigkeiten: ≡ ' ⇔ alle ' ∈ ' werden von logisch induziert alle ∈ werden von ' logisch induziert volle Abhängigkeit: wenn auf der linken Seite der Abhängigkeit ein Attribut entfernt wird, liegt die Abhängigkeit nicht mehr in Γ+ transitive Abhängigkeit: ein Attribut A ist von Y abhängig, Y gleichzeitig von X, dann ist A transitiv über Y von X abhängig (X darf nicht von Y abhängig sein und A nicht in X bzw. Y vorkommen) { } Normalformen: Normalformen höherer Ordnung erfüllen auch die Normalformen tieferer Ordnung 1NF: Eine Relation (Tabelle) befindet sich in der ersten Normalform, wenn alle Attribute atomare Werte enthalten und keine Wiederholungsgruppen (beinhalten den selben Wert) auftreten 2NF: Jedes Nichtschlüsselattribut (NSA)ist funktionell vom gesamten Primärschlüssel abhängig (automatisch wenn der Primärschlüssel nur aus einem Teil besteht) 3NF: Jedes NSA ist von jedem Schlüssel nicht transitiv abhängig BCNF(Boyce-Codd-Normalform):Jedes Attribut ist von jedem Schlüssel nicht transitiv abhängig es gibt Tabellen die sich nicht abhängigkeitserhaltend von 3NF in BCNF umformen lassen Algorithmus zur Zerlegung in BCNF-Schemata: gegeben: S(Â, Γ) mit einer Menge Γ von funktionalen Abhängigkeiten gesucht: DS(S1(Â1, Γ1), ..., Sn(Ân, Γn); Γ0) mit allen Si(Âi, Γi) in BCNF 1. Initialisiere DS(S1, Γ0), wobei S1 = S 2. Ist Si nicht in BCNF, dann suche eine FD, bei der auf der linken Seite ein X steht, dass kein Schlüssel enthält und auf der rechten Seite nur ein Attribut A steht, welches nicht in X vorkommt. Zerlege Si in Si1 und Si2: Âi1 enthält die rechte Seite der FD vereinigt mit der linken: { A }∪ X Γi1 enthält alle FDs mit den Attributen aus Âi1 : i1=  i Âi2 enthält alle Attribute außer der rechten Seite der FD also A :  i2=  i ∖ { A } Γi2 enthält alle FDs mit den Attributen aus Âi2 : i1 =  i Wiederhole 2. solange bis jedes Si in BCNF ist 3. gebe die Zerlegung aus i1 i2 Test auf BCNF: 1. Suche 2 Attribute {A, B} in Âi bei denen A ∈ ( Âi \ {A,B})+ vorkommt werden keine gefunden liegt BCNF vor 2. füge in Y alle Werte von Âi ein bis auf B : Y = Âi \ {B} 3. solange ein weiteres Paar {A, B'} mit der Eigenschaft von 1. gefunden wird, entferne B' aus Y: Y = Y \{ B'} 4. Setze Âi1 = Y und Âi2 = Âi \ {A} das Schema Si1 ist nun in BCNF, Si2 muss jedoch noch weiter untersucht werden Die erreichte Zerlegung in BCNF hat einen verlustlosen Verbund, ist jedoch nicht zwingend abhängigkeitserhaltend nichtredundant: ein Γ , bei dem keine Abhängigkeit entfernt werden darf: ¬≡ ∖ {} rechtsreduziert: ein Γ , bei dem jede FD nur ein Attribut auf der rechten Seite hat linksreduziert: ein Γ, bei dem auf keiner linken Seite ein Attribut weggelassen werden darf Algorithmus: 1. alle rechten Seiten aufspalten und in Γ die entsprechenden FDs ersetzen 2. überprüfen ob Informationen redundant sind (z.B. ist CE --> A redundant wenn ein C --> A vorliegt 3. wenn 2 gleiche linken Seiten vorliegen überprüfen ob die Hülle vom einen ohne das andere dessen rechte Seite mit einschließt, dann wäre es redundant 4. bei den linken Seiten mit mehreren Attributen überprüfen ob nicht einzelne Attribute durch andere Beziehungen überflüssig sind ( ACD –> B kann zu CD –> B vereinfacht werden, wenn eine C –> A existiert. 5. Die noch vorliegenden FDs bilden das nichtredundante Γ1 erster Synthesealgorithmus: gegeben: ein S(Â, Γ) mit einer nichtredundanten und reduzierten Menge von FDs Γ 1. Durchlaufe alle γi aus Γ und lege für alle Attribute in γi ein Âi an mit Γi = { γi } 2. das letzte Âi enthält den Schlüssel X, das zugehörige Γ die leere Menge 3. gebe die Si(Âi, Γi) aus existiert ein γ = X -->Y in S(Â, Γ), X ist der Schlüssel, so kann das letzte Schema für einen gesonderten Schlüssel entfallen äquivalenz bezüglich Γ: X, Y aus Â, wenn X --> Y und Y --> X in Γ+ (Schreibweise: X ≡Y ) Lemma: sei 1 ≡ 2 auf  und jeweils nichtredundant. Ist X-->Y in Γ1 so existiert ein U-->V in Γ2 mit X ≡U Partition: E Γ(X) beinhaltet alle FDs U --> V aus Γ, bei denen X ≡U E X beinhaltet E Γ(X) wenn es nicht leer ist minimales Γ: wenn es kein Γ' gibt, das äquivalent zu Γ ist, aber weniger FDs enthält direkt abhängig: X ̇ Y bedeutet, dass X das Y direkt unter Γ bestimmt, es gibt in der nichtredundanten Menge ' ≡ also keine Abhängigkeit U -->V mit X ≡U Lemma A: Γ sei nichtredundant: Sei X --> Y in E Γ(X) und Y aus  mit Y ≡ X . Dann existiert eine Regel Z --> W in E Γ(X) mit Y ̇ Z Lemma B: Sei Γ minimal und X aus Â. Dann existiert kein Y-->U aus E Γ(X) und kein Z-->V aus E Γ(X) mit Y ≠ Z und Y ̇ Z Die Abbildung E Γ1(X) --> E Γ2(X) ist eine Bijektion, wenn Γ1 und Γ2 äquivalent und minimal sind Algorithmus zur Konstruktion einer minimalen Menge Γ: 1. Γ durch äquivalentes nichtredundantes Γ' ersetzen vorgehen: zunächst wird Γ ' = Γ gesetzt nun wird bei jeder FD X-->Y aus Γ ' geprüft ob Y auch in der Hülle von X bez. Γ' liegt, wenn die FD X-->Y aus Γ ' entfernt wird (mit Linclosure). Ist dies der Fall wird sie aus Γ' entfernt 2. Äquivalenzklassen von E ' X bestimmen vorgehen: Matrix M bilden, die so viele Zeilen wie linke Seiten von Abhängigkeiten besitzt und soviele Spalten wie Abhängigkeiten. Die Matrix enthält eine 1 wenn, die linke Seite der Abhängigkeiten in den Spalten in der Hülle von der linken Seite der Zeilen ist. Ansonten wird eine 0 eingetragen. Hierfür ist für jede Zeile einmal Linclosure aufzurufen X ≡ U wenn es ein V, Z gibt mit m(X, U-->V) = 1 und m(U, X-->Z) = 1 3. Durchlaufe E ' X mit E ' X Durchlaufe E ' X mit Y --> U Durchlaufe E ' X ∖ {Y U } mit Z --> V Ist (Y--> U) ≠ (Z --> V) und Y ̇ Z , so ersetze Y-->U und Z-->V durch Z-->UV 4. Gebe das so veränderte Γ' aus Test auf Y ̇ Z : Y--> U und Z-->V aus E ' X ̇ Bilde Linclosure Y , ' ∖ E ' X =Y Linclosure muss hierfür modifiziert werden: count soll auch für die FDs aus E Γ(X) bestimmt werden. Ist für eine Abhängigkeit R-->S count = 0, ist R⊆Y ̇ Y ̇ Z ⇔ Z ⊆Y ̇ zusammengesetzte funktionale Abhängigkeit: (X1, ..., Xk) --> Y, wenn alle Xi --> Y und alle Xi nach Xj ringförmige Menge: X 1, ... , X k ∪ k i=1 Y mit Xi, Yi aus E Γ(X) = {X1 --> Y1, ..., Xk --> Yk} 2. Synthesealgorithmus: 1. Ersetze Γ durch eine reduzierte minimale ringförmige Menge 2. die Âi bestehen aus den Xi vereinigt mit dem Y aus der ringförmigen Abhängigkeit das Γi besteht aus X1 --> Âi, ..., Xk --> Âi 3. Falls kein Âi einen Schlüssel für S(Â, Γ) enthält, wird Sm = S(X, Ø) hinzugefügt Mehrwertige Abhängigkeiten (MVD) Def: Sei R eine Relation auf  und X,Y aus Â. Dann erfüllt R die mehrwertige Abhängigkeit X -->> Y genau dann, wenn für alle t, s ∊ R mit s |X = t |X ein u∊R existiert mit u |X = s |X , u|Y = t|Y und u| \ (X ∪Y) = s| \ (X ∪Y) X -->> Y gilt, wenn ein verlustloser Verbund aus (X∪Y) und (X∪Z) vorliegt, mit X,Y,Z paarweise disjunkt --> wird eine solche Abhängigkeit erkannt kann zerlegt werden 4. Normalform (4NF) Ein Relationsschema S(Â, Γ) ist in 4NF, wenn aus X-->>Y ∊ Γ+ mit Y ⊈ X, X∪Y ≠  und Y≠Ø folgt, dass X einen Schlüssel für S enthält Algorithmus zur Zerlegung in 4NF (Ergänzung zum Zerlegungsalgorithmus in BCNF): 1. Suche ein X -->> Y, wobei X keinen Schlüssel enthält 2. Zerlege Schema: Âi1 = X cY, i1=  i Âi2 = Âi \ Y, i2 =  i i1 i2 Axiome für mehrwertige Abhängigkeiten: M1: Es gilt immer X -->> X M2: X-->>Y impliziert X∪Z -->>Y M3: X-->>Y und X -->>Z impliziert X-->>Y∪Z M4: X-->>Y und X -->>Z impliziert X-->>Y1Z M5: X-->>Y und Y -->>Z impliziert X-->>Z \ Y M6: X-->>Y und Y∪W -->> Z impliziert X∪W -->>Z \ (Y∪W) M7: X-->>Y und Z =  \ {X,Y} impliziert X -->> Z C1: X-->Y impliziert X-->> Y C2: X-->>Y, Z-->W, WfY und Y1Z = Ø impliziert X-->W Verbundabhängigkeit: R erfüllt die Verbundabhängigkeit |><|i=1nÂi genau dann, wenn R = |><|i=1n πÂi(R) erfüllt die mehrwertige Abhängigkeit ist ein Spezialfall der Vebundabhängigkeit 5.Normalform (5NF): Ein Relationsschema S(Â, Γ) ist in 5NF, wenn jede Verbundabhängigkeit in Γ+ bereits von den Schlüsselabhängigkeiten Xi -->  impliziert wird Der Chase-Prozess:  = {A1, ..., An}, Σ = {ai, bi | i 0ù} Tableau: Menge von Tupeln t:  --> Σ mit Eigenschaften: - in der i'ten Spalte befinden sich nur a's mit Index i - kein Symbol aus Σ tritt in verschiedenen Spalten auf Menge der auftretenden Symbole: Bild(T), beinhaltet alle Elemente des Tableaux ρ : mögliche Abbildung der ai und bi auf die Relation --> ρ(T) ist eine Teilmenge der Relation. In T werden die ai und bi durch die Werte von ρ ersetzt T(R) besteht aus allen ρ(T)s subsummiert: Eine Zeile t wird von einer anderen Zeile subsummiert, wenn alle a's der Zeile t auch in der anderen Zeile vorkommen sub(T): enthält nur Zeilen die nicht mehr subsummiert werden können 2 Tableaux sind identisch, wenn sub(T1) = sub(T2)