Deduktive Datenbanken Grundkonzepte einer deduktiven Datenbank IDB intensionale Datenbasis (hergeleitete Relationen) Regeln als Datalog Programm EDB extensionale Datenbasis (Basis-Relationen) Freitag, 18. September 2009 1 Die relationale Uni-DB PersNr 2125 2126 2127 2133 2134 2136 2137 Professoren Name Rang Sokrates C4 Russel C4 Kopernikus C3 Popper C3 Augustinus C3 Curie C4 Kant C4 hören MatrNr 26120 27550 27550 28106 28106 28106 28106 29120 29120 29120 29555 25403 VorlNr 5001 5001 4052 5041 5052 5216 5259 5001 5041 5049 5022 5022 Freitag, 18. September 2009 Raum 226 232 310 52 309 36 7 MatrNr 24002 25403 26120 26830 27550 28106 29120 29555 voraussetzen Vorgänger Nachfolger 5001 5041 5001 5043 5001 5049 5041 5216 5043 5052 5041 5052 5052 5259 MatrNr 28106 25403 27550 prüfen VorlNr PersNr Note 5001 2126 1 5041 2125 2 4630 2137 2 Studenten Name Xenokrates Jonas Fichte Aristoxenos Schopenhauer Carnap Theophrastos Feuerbach Semester 18 12 10 8 6 3 2 2 Vorlesungen VorlNr Titel 5001 Grundzüge 5041 Ethik 5043 Erkenntnistheorie 5049 Mäeutik 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 5022 Glaube und Wissen 4630 Die 3 Kritiken SWS 4 4 3 2 4 3 2 2 2 4 gelesen von 2137 2125 2126 2125 2125 2126 2126 2133 2134 2137 2 Rekursion • • Find alle Voraussetzungen von “Der Wiener Kreis” Auch indirekte Voraussetzungen beliebiger Tiefe select Vorgänger ??? from voraussetzen,Vorlesungen ??? where Nachfolger= VorlNr and Freitag, 18. September 2009 Titel= `Der Wiener Kreis´ 3 Voraussetzungsgraph Der Wiener Kreis 5259 Wissenschaftstheorie 5052 Bioethik 5216 Erkenntnistheorie 5043 Ethik 5041 Mäeutik 5049 Grundzüge 5001 Freitag, 18. September 2009 4 Tiefe 2 select v1.Vorgänger from voraussetzen v1, voraussetzen v2,Vorlesungen v where v1.Nachfolger= v2.Vorgänger and v2.Nachfolger= v.VorlNr and v.Titel=`Der Wiener Kreis´ Freitag, 18. September 2009 5 Voraussetzungsgraph Der Wiener Kreis 5259 Wissenschaftstheorie 5052 Bioethik 5216 Erkenntnistheorie 5043 Ethik 5041 Mäeutik 5049 Grundzüge 5001 Freitag, 18. September 2009 6 Tiefe n select v1.Vorgänger from voraussetzen v1 ... voraussetzen vn_minus_1 voraussetzen vn, Vorlesungen v where v1.Nachfolger= v2.Vorgänger and ... vn_minus_1.Nachfolger= vn.Vorgänger and vn.Nachfolger = v.VorlNr and v.Titel= `Der Wiener Kreis´ Freitag, 18. September 2009 7 Voraussetzungsgraph Der Wiener Kreis 5259 Wissenschaftstheorie 5052 Bioethik 5216 Erkenntnistheorie 5043 Ethik 5041 Mäeutik 5049 Grundzüge 5001 Freitag, 18. September 2009 8 Transitive Hülle Der Wiener Kreis 5259 Wissenschaftstheorie 5052 Bioethik 5216 Erkenntnistheorie 5043 Ethik 5041 Mäeutik 5049 Grundzüge 5001 Freitag, 18. September 2009 9 Rekursive Anfragen with recursive TransVorl (Vorg, Nachf) as (select Vorgänger, Nachfolger from voraussetzen union all select t.Vorg, v.Nachfolger from TransVorl t, voraussetzen v where t.Nachf= v.Vorgänger) select Titel from Vorlesungen where VorlNr in (select Vorg from TransVorl where Nachf in (select VorlNr from Vorlesungen where Titel= `Der Wiener Kreis´) ) Freitag, 18. September 2009 10 Rekursion in SQL • • Man kann with rekursiv verwenden • Die Definition der Sicht wird so lange iterativ neu berechnet, bis keine neuen Tupel hinzukommen (Fixpunkt) • Vorsicht: Anfrage terminiert evtl. nicht! (Wann?) Mehrere Teilklauseln können mit union (all) verbunden werden Freitag, 18. September 2009 11 Datalog • • Anfragesprache, basierend auf Prädikatenlogik Ursprung in der Logikprogrammierung • • • • • “Prolog ohne Funktionen” Relationales Datenmodell, erweitert um Regeln Einfachere Syntax als SQL Rekursive Anfragen leicht zu formulieren Nützlich für formale Untersuchungen von Anfrageeigenschaften Freitag, 18. September 2009 12 Datalog Regel: sokLV(T,S) :-vorlesungen(V,T,S,P ), professoren(P, „Sokrates“,R,Z ), >(S,2). Grundbausteine der Regeln sind atomare Formeln oder Literale: q(A1, ..., Am). q ist dabei der Name einer Basisrelation, einer abgeleiteten Relation oder eines eingebauten Prädikats: <,=,>,… Beispiel: professoren(S, „Sokrates“,R,Z ). Äquivalenter Domänenkalkül-Ausdruck: {[t,s] | ∃v,p ([v,t,s,p] ∈ Vorlesungen ∧ ∃n,r,z ([p,n,r,z] ∈ Professoren ∧ n = „Sokrates“ ∧ s > 2))} Freitag, 18. September 2009 13 Datalog-Regel • Linke Seite ist der Kopf (Head, Goal) der Regel, rechte Seite Rumpf (Body) • Jedes qj (...) ist eine atomare Formel. Die Prädikate qj werden auch als Subgoals bezeichnet. • X1, ...,Xm sind Variablen, die mindestens einmal auch im Rumpf vorkommen müssen • Aij sind Konstanten oder Variablen Freitag, 18. September 2009 14 Datalog-Regel • • :- entspricht Implikation, Rumpf Kopf Logisch äquivalente Form obiger Regel: p(...) ∨ ¬q1 (...) ∨... ∨ ¬qn (...) Freitag, 18. September 2009 15 Beispiel Datalog-Programm • • Voraussetzen: {[Vorgänger, Nachfolger]} Vorlesungen: {VorlNr, Titel, SWS, gelesenVon]} geschwisterVorl(N 1, N 2) :- voraussetzen(V, N1),voraussetzen(V, N2)), N1 < N2. geschwisterThemen(T 1, T 2) :- geschwisterVorl(N1, N2), vorlesungen(N1, T1, S1, R1), vorlesungen(N2, T2, S2, R2). aufbauen(V,N ) :- voraussetzen(V,N ) aufbauen(V,N ) :- aufbauen(V,M ), voraussetzen(M,N ). verwandt(N,M ) :- aufbauen(N,M ). verwandt(N,M ) :- aufbauen(M,N ). verwandt(N,M ) :- aufbauen(V,N ), aufbauen(V,M ). Freitag, 18. September 2009 16 Analogie zur EDB/IDB in rel. DBMS • Basis-Relationen entsprechen den EDB. • Sichten entsprechen den IDB: • „Aufbauen“ als Regeln in einem deduktiven DBMS: aufbauen(V,N ) :- voraussetzen(V,N ) aufbauen(V,N ) :- aufbauen(V,M ), voraussetzen(M,N ). • „Aufbauen“ als Sichtdefinition in DB2: create view aufbauen(V,N) as (select Vorgaenger, Nachfolger from voraussetzen union all select a.V, v.Nachfolger from aufbauen a, voraussetzen v where a.N = v.Vorgaenger) select * from aufbauen Freitag, 18. September 2009 17 Abhängigkeitsgraph geschwisterThema verwandt geschwisterVorl vorlesungen aufbauen voraussetzen Freitag, 18. September 2009 18 Rekursion • Abhängigkeitsgraph enthält Zykel • • Programm ist rekursiv Im Beispiel: aufbauen Freitag, 18. September 2009 19 Sicherheit von Datalog-Regeln • Es gibt unsichere Regeln, wie z.B. ungleich(X,Y) :- X ≠ Y. Diese definieren unendliche Relationen. • Datalog-Regel ist sicher, wenn alle Variablen im Kopf beschränkt (range restricted) sind • Variable X ist range-restricted, wenn im Rumpf • • • X in einem normalen (nicht eingebauten) Prädikat vorkommt Prädikat der Form X = c mit einer Konstante c vorkommt Prädikat X = Y vorkommt, und Y ist range-restricted Freitag, 18. September 2009 20 Auswertung nicht-rekursiver Datalog-Programme • Materialisierung der IDB-Prädikate • • • Umwandlung der Regeln in relationale Algebra Materialisierung erfolgt in topologischer Reihenfolge Materialisierte IDB-Prädikate können wie EDBPrädikate behandelt werden Freitag, 18. September 2009 21 Ein nicht rekursives Programm geschwisterVorl(N 1, N 2) :- voraussetzen(V, N1),voraussetzen(V, N2)), N1 < N2. geschwisterThemen(T 1, T 2) :- geschwisterVorl(N1, N2), vorlesungen(N1, T1, S1, R1), vorlesungen(N2, T2, S2, R2). voraussetzen geschwisterThema geschwisterVorl vorlesungen Mögl. Topologische Ordnung: voraussetzen, geschwisterVorl, vorlesungen, geschwisterThema Freitag, 18. September 2009 22 Auswertung nicht-rekursiver Datalog-Programme: Übersicht Schritt 1: Für jede Regel mit dem Kopf p(...), also p(...) :- q1(...), ..., qn(...). bilde eine Relation mit allen im Körper der Regel vorkommenden Variablen als Attribute (Join der materialisierten Relationen für qi sowie Selektion mit restlichen Prädikaten) Wichtig: Korrekte Umbenennung von Variablen Schritt 2: Projiziere alle Relationen aus Schritt I auf die Variablen, die im Kopf vorkommen, und bilde für jedes Prädikat die Vereinigung dieser Relationen. Freitag, 18. September 2009 23 Auswertung von Geschwister Vorlesungen und Geschwister Themen • Die Relation zu Prädikat gV ergibt sich nach Schritt 1zu σN1<N2 (Vs1(V, N1) A Vs2(V, N2)) Vs1(V, N1) := ρV←$1(ρN1 ←$2 (Voraussetzen)) Vs2(V, N1) := ρV←$1(ρN2 ←$2 (Voraussetzen)) • Gemäß Schritt 2. ergibt sich: GV(N1, N2) := ΠN1, N2 (σN1<N2(Vs1(V, N1) A Vs2(V, N2))) • Analog ergibt sich für die Herleitung von GT: GT(T1,T2) := ΠT1,T2(GV(N1,N2) A VL1(N1,T1,S1,R1) A VL2(N2,T2,S2,R2)) Freitag, 18. September 2009 24 Ausprägung der Relationen GeschwisterVorl und GeschwisterThemen GeschwisterVorl GeschwisterThemen N1 N2 5041 5043 T1 T2 5043 5049 Ethik Erkenntnistheorie 5041 5049 Erkenntnistheorie Mäeutik 5052 5216 Ethik Mäeutik Wissenschaftstheorie Bioethik Freitag, 18. September 2009 25 Auswertungs-Algorithmus: Details Dabei sind die Vi die in qi(…) vorkommenden Variablen. Das Selektionsprädikat Fi setzt sich aus einer Menge konjunktiv verknüpfter Bedingungen zusammen. Freitag, 18. September 2009 26 Selektionsprädikat Fi • Konstante c an j-ter Stelle qi(...,c,...) $j = c • Mehrfach verwendete Variable X in qi(...,X,...,X,...) (Positionen k und l) $k = $l Freitag, 18. September 2009 27 Umbenennung • Die Attribute der Relation werden entsprechend der Variablennamen im Subgoal benannt qi(...,V1,...,Vn,...) k1 Freitag, 18. September 2009 kn ΠV1,...,Vn(ρV1←$k1,...,Vn←$kn(Ei)) 28 Auswertungs-Algorithmus Für Variable Y, die nicht in den normalen Prädikaten vorkommt, gibt es zwei Möglichkeiten: Sie kommt nur als Prädikat Y=c für eine Konstante c vor. Dann bilde einstellige Relation DY := ρY←$1 ({[c]}) Sie kommt als Prädikat X = Y vor, und X kommt in Prädikat qi(…,X,…) an k—ter Stelle vor. Dann bilde Relation DY := ρY←$k (Π$k (Qi)) . Freitag, 18. September 2009 29 Auswertungs-Algorithmus: Details Bilde Join aus den Ei und DY E := E1 A ... A En A DY A... und wende Selektion σF (E) an. F ist konjunktiven Verknüpfung der Vergleichsprädikate X ФY Projiziere auf die im Kopf der Regel vorkommenden Variablen: ΠX 1,…, Xm Freitag, 18. September 2009 (σF (E )) 30 Beispiel: nahe verwandte Vorlesungen (r1) nvV(N1,N2) :- gV(N1,N2). (r2) nvV(N1,N2) :- gV(M1,M2),vs(M1,N1),vs(M2,N2). Für die erste Regel erhält man Für die zweite Regel Daraus ergibt sich dann durch die Vereinigung Freitag, 18. September 2009 31 Vereinigung • Die Ausdrücke für alle Regeln eines Prädikats werden vereinigt, um die Ergebnisrelation zu erhalten • Vereinigung und evtl. andere Regeln erfordern einheitliches Schema • • Also noch Umbenennung erforderlich Sonderfall:Variablen, die im Kopf mehrfach vorkommen • Durch neue Variablen und Gleichheitsprädikate ersetzen Freitag, 18. September 2009 32 Auswertung rekursiver Regeln Aufbauen V N 5001 5041 5001 5043 5001 5049 a(V,N) :- vs(V,N). 5041 5216 5041 5052 a(V,N) :- a(V,M),vs(M,N). 5043 5052 5052 5259 5001 5216 5001 5052 5001 5259 5041 5259 5043 5259 Freitag, 18. September 2009 33 Auswertung rekursiver Regeln Betrachten wir das Tupel [5001, 5052] aus der Relation Aufbauen. Dieses Tupel kann wie folgt hergeleitet werden: 1. a (5001, 5043) folgt aus der ersten Regel, da vs (5001, 5043) gilt. 2. a (5001, 5052) folgt aus der zweiten Regel, da a) a (5001, 5043) nach Schritt 1. gilt und b) vs (5043, 5052) gemäß der EDB-Relation Voraussetzen gilt. Freitag, 18. September 2009 34 Naive Auswertung durch Iteration A := {}: /*Initialisierung auf die leere Menge */ repeat A’:=A; /* Erste Regel */ A:=Vs(V,N) /* Zweite Regel */ A:=A∪ΠV,N(ρ$1→V,$2→M(A’)A ρ$1→M,$2→N(Vs) until A‘ = A output A; Freitag, 18. September 2009 35 Naive Auswertung durch Iteration 1. Erster Durchlauf kopiert Voraussetzen nach A 2. Im zweiten Schritt kommen die Tupel [5001,5216], [5001,5052], [5041,5259] und [5043,5259] hinzu. 3. Neues Tupel [5001,5259] 4. Abbruchbedingung A‘ = A erfüllt Freitag, 18. September 2009 36 (Naive) Auswertung der rekursiven Regel aufbauen Schritt A 1 [5001,5041], [5001,5043], [5001,5049], [5041,5216], [5041,5052], [5043,5052], [5052,5259] 2 [5001,5041], [5001,5043], [5001,5049], [5041,5216], [5041,5052], [5043,5052], [5052,5259] [5001,5216], [5001,5052], [5041,5259], [5043,5259], 3 [5001,5041], [5001,5043], [5001,5049], [5041,5216], [5041,5052], [5043,5052], [5052,5259] [5001,5216], [5001,5052], [5041,5259], [5043,5259], [5001,5259] 4 wie in Schritt 3 (keine Veränderung, also Terminierung des Algorithmus Freitag, 18. September 2009 37