Title: Deduktive Datenbanken
1Deduktive Datenbanken
- Deduktive Datenbanken schlagen eine Brücke
zwischen relationalen Datenbanken und den
logik-basierten Programmiersprachen (hier
Prolog). - Die persistent gespeicherten Relationen einer
Datenbanken werden hier als Prädikate der Logik
erster Stufe angesehen - Genau falls sich ein Tupel (x,y,z) in Relation R
befindet, wird das zugehörige Prädikat r(x,y,z)
mit true bewertet. - Damit entsprechen die persistenten Relationen der
Datenbank der Faktenbasis in Prolog. - Eine Regelsprache, Datalog (Data Logic), wird
verwendet, um aus diesen vorhandenen Fakten,
neues "Wissen" abzuleiten (zu deduzieren).
2Deduktive Datenbanken
Grundkonzepte einer deduktiven Datenbank
IDBintensionale Datenbasis (hergeleitete
Relationen)
Regeln als Datalog Programm
EDB extensionale Datenbasis (Basis-Relationen)
3Deduktive Datenbanken Terminologie
- Die extensionale Datenbasis (EDB), die manchmal
auch Faktenbasis genannt wird. Die EDB besteht
aus einer Menge von Relationen(Ausprägungen) und
entspricht einer ganz normalen relationalen
Datenbasis. - Die Deduktionskomponente, die aus einer Menge von
(Herleitungs-)Regeln besteht. Die Regelsprache
heißt Datalog. - Die intensionale Datenbasis (IDB), die aus einer
Menge von hergeleiteten Relationen(Ausprägungen)
besteht. Die IDB wird durch Auswertung des
Datalog-Programms aus der EDB generiert.
4Beispiel Rekursion in Prolog/Datalog
-
5 - 1 2 3
4 -
6 7 -
- Faktenbasis zu diesem gerichteten Graphen
-
- kante(1,2).
- kante(2,3).
- kante(3,4).
- kante(4,5).
- kante(4,6).
- kante(6,7).
- kante(3,6).
5Beispiel Rekursion in Prolog/Datalog
-
5 - 1 2 3
4 -
6 7 -
- Leite aus der Faktenbasis die Pfade in diesem
gerichteten Graphen ab -
- kante(1,2). pfad(V,N) - kante(V,N).
- kante(2,3). pfad(V,N) - kante(V,Z),
pfad(Z,N). - kante(3,4).
- kante(4,5). Alternative Notation
- kante(4,6).
- kante(6,7). pfad(V,N) ? kante(V,N).
- kante(3,6). ? pfad(V,N) ? kante(V,Z) ?
pfad(Z,N).
6Rekursion in SQL(?)
- Bestimme die Voraussetzungen für die Vorlesung
"Der Wiener Kreis" - SELECT Vorgänger
- FROM voraussetzen, Vorlesungen
- WHERE VorlNr Nachfolger
- AND Titel "Der Wiener Kreis"
Vorlesungen Vorlesungen Vorlesungen Vorlesungen
VorlNr Titel SWS gelesenVon
5001 Grundzüge 4 2137
5041 Ethik 4 2125
5043 Erkenntnistheorie 3 2126
5049 Mäeutik 2 2125
4052 Logik 4 2125
5052 Wissenschaftstheorie 3 2126
5216 Bioethik 2 2126
5259 Der Wiener Kreis 2 2133
5022 Glaube und Wissen 2 2134
4630 Die 3 Kritiken 4 2137
voraussetzen voraussetzen
Vorgänger Nachfolger
5001 5041
5001 5043
5001 5049
5041 5216
5043 5052
5041 5052
5052 5259
7(No Transcript)
8Rekursion in SQL(?) Pfade der Länge 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"
Vorlesungen Vorlesungen Vorlesungen Vorlesungen
VorlNr Titel SWS gelesenVon
5001 Grundzüge 4 2137
5041 Ethik 4 2125
5043 Erkenntnistheorie 3 2126
5049 Mäeutik 2 2125
4052 Logik 4 2125
5052 Wissenschaftstheorie 3 2126
5216 Bioethik 2 2126
5259 Der Wiener Kreis 2 2133
5022 Glaube und Wissen 2 2134
4630 Die 3 Kritiken 4 2137
voraussetzen voraussetzen
Vorgänger Nachfolger
5001 5041
5001 5043
5001 5049
5041 5216
5043 5052
5041 5052
5052 5259
voraussetzen voraussetzen
Vorgänger Nachfolger
5001 5041
5001 5043
5001 5049
5041 5216
5043 5052
5041 5052
5052 5259
9Rekursion in SQL(?) Pfade der Länge n
SELECT v1.Vorgänger FROM voraussetzen v1
? voraussetzen vn-1 voraussetzen
vn, Vorlesungen v WHERE v1.Nachfolger
v2.Vorgänger and ? vn-1.Nachfolger
vn.Vorgänger and vn.Nachfolger
v.VorlNr and v.Titel "Der Wiener Kreis"
n-facher self join der Relation voraussetzen
10Transitive Hülle der Relation R(A,B)
transA,B(R) (a,b) ? ?k ? IN (?t1, ..., tk ?
R ( t1.A t2.B ? ?
tk-1.A tk.B ? t1.A a ?
tk.B b))
11Der Wiener Kreis
Wissenschaftstheorie
Bioethik
Erkenntnistheorie
Ethik
Mäeutik
Grundzüge
Extensional Intensional
12Rekursion(!) in DB2/SQL1999 Alle
Voraussetzungen für "Der Wiener Kreis"
? WITH TransVorl (Vorg, Nachf) AS ( SELECT
Vorgänger, Nachfolger FROM voraussetzen
UNION ALL SELECT t.Vorg, v.Nachfolger
Rekursion! FROM TransVorl t, voraussetzen
v WHERE t.Nachf v.Vorgänger)
Abbruch? Sobald View stabil. ? SELECT
Titel FROM Vorlesungen WHERE VorlNr IN
(SELECT Vorg FROM TransVorl WHERE Nachf in
(SELECT VorlNr FROM Vorlesungen
WHERE Titel "Der Wiener Kreis") )
13Datalog Regeln, Literale
Regel sokLV(T,S) - vorlesungen(V,T,S,P ),
professoren(P, "Sokrates",R,Z ),
gt(S,2). Ä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 gt 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 lt,,gt, Beispiel
professoren(S, "Sokrates",R,Z ).
14Datalog Regeln
- Jedes qj (...) ist eine atomare Formel. Die qj
werden oft als Subgoals bezeichnet. - X1, ...,Xm sind Variablen, die mindestens einmal
auch auf der rechten Seite des Zeichens -
vorkommen müssen. - Logisch äquivalente Form obiger Regel
(Hornklausel) - p(...) ? q1 (...) ? ... ? qn (...)
- Wir halten uns an folgende Notation
- Prädikate beginnen mit einem Kleinbuchstaben.
- Die zugehörigen Relationen seien es EDB- oder
IDB-Relationen werden mit gleichem Namen, aber
mit einem Großbuchstaben beginnend, bezeichnet.
15Beispiel Datalog-Programm
- Zur Bestimmung von (thematisch) verwandten
Vorlesungspaaren - EDB-Relationen Voraussetzen Vorgänger,
Nachfolger - Vorlesungen
VorlNr, Titel, SWS, gelesenVon - geschwisterVorl(N1, N2) - voraussetzen(V,
N1), -
voraussetzen(V, N2)), N1 lt N2. - geschwisterThemen(T1, T2) -
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
).
16Analogie zur EDB/IDB in RDBMS
- Basis-Relationen entsprechen den EDB.
- Sichten entsprechen den IDB
- "aufbauen" als Regeln in einem deduktiven
DBMSaufbauen(V,N ) - voraussetzen(V,N
)aufbauen(V,N ) - aufbauen(V,M ),
voraussetzen(M,N ). - "aufbauen" als Sichtdefinition in DB2CREATE
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
17Eigenschaften von Datalog-Programmen
Regel-Abhängigkeitsgraph ( "wird
verwendet von")
geschwisterThemen
verwandt
geschwisterVorl
aufbauen
vorlesungen
voraussetzen
- Ein Datalog-Programm ist rekursiv, wenn der
Abhängigkeitsgraph einen (oder mehrere) Zyklen
hat - Unser Beispielprogramm ist rekursiv aufbauen ?
aufbauen
18Sicherheit von Datalog-Regeln
- Es gibt unsichere Regeln, wie z.B.
ungleich(X, Y) - X ? Y.Diese
definieren unendliche Relationen. - Eine Datalog-Regel ist sicher, wenn alle
Variablen im Kopf eingeschränkt (range
restricted) sind. Dies ist für eine Variable X
dann der Fall, wenn - die Variable im Rumpf der Regel in mindestens
einem normalen Prädikat also nicht nur in
eingebauten Vergleichsprädikaten vorkommt oder - ein Prädikat der Form X c mit einer Konstante c
im Rumpf der Regel existiert oder - ein Prädikat der Form X Y im Rumpf vorkommt,
und nachgewiesen ist, dass Y eingeschränkt ist.
19Ein zyklenfreier Abhängigkeitsgraph
- gV(N1, N2) - vs(V, N1), vs(V, N2), N1 lt N2.
- gT(T1, T2) - gV(N1, N2), vL(N1, T1, S1, R1),
vL(N2, T2, S2, R2) - Eine mögliche topologische Sortierung ist vs,
gV, vL, gT. - ? Auswertungsreihenfolge für Prädikate!
gT
gV
vL
vs
20Auswertung nicht-rekursiver Datalog-Programme
- Für jede Regel mit dem Kopf p(...) , also
- p(...) - q1(...), ..., qn(...).
- bilde eine Relation, in der alle im Körper der
Regel vorkommenden Variablen als Attribute
vorkommen. Diese Relation wird im wesentlichen
durch einen natürlichen Verbund der Relationen
Q1, ..., Qn, die den Relationen der Prädikate q1,
..., qn entsprechen, gebildet. Man beachte, dass
diese Relationen Q1, ..., Qn wegen der Einhaltung
der topologischen Sortierung bereits ausgewertet
(materialisiert) sind. - Da das Prädikat p durch mehrere Regeln definiert
sein kann, werden die Relationen aus Schritt 1
vereinigt. Hierzu muss man vorher auf die im Kopf
der Regeln vorkommenden Attribute projizieren.
Wir nehmen an, dass alle Köpfe der Regeln für p
dieselben Attributnamen an derselben Stelle
verwenden durch Umformung der Regeln kann man
dies immer erreichen.
21Auswertung von Geschwister Vorlesungen und
Geschwister Themen
- Die Relation zu Prädikat gV ergibt sich nach
Schritt 1 aus folg. Relationenalgebraausdruck - ? N1ltN2 (Vs1(V, N1) Vs2(V, N2))
- Vs1(V, N1) ?V?1(?N1? 2 (?Vs1(Voraussetzen)))
- Die dadurch definierte Relation enthält Tupel v,
n1, n2 mit - Das Tupel v, n1 ist in der Relation
Voraussetzen enthalten, - das Tupel v, n2 ist in der Relation
Voraussetzen enthalten und - n1 lt n2.
- Gemäß Schritt 2. ergibt sich
- GV(N1, N2) ?N1, N2 (? N1ltN2 (Vs1(V, N1)
Vs2(V, N2))) - Analog ergibt sich für die Herleitung von GT
- GT(T1,T2) ?T1,T2(GV(N1,N2)
VL1(N1,T1,S1,R1) VL2(N2,T2,S2,R2))
22Veranschaulichung der EDB-Relation Voraussetzen
5259 (WienerKreis)
5052 (Wiss. Theorie)
5216 (Bioethik)
5043 (Erk. Theorie)
5049 (Mäeutik)
5041 (Ethik)
5001 (Grundzüge)
23Ausprägung der Relationen GeschwisterVorl und
GeschwisterThemen
GeschwisterVorl GeschwisterVorl
N1 N2
5041 5043
5043 5049
5041 5049
5052 5216
GeschwisterThemen GeschwisterThemen
T1 T2
Ethik Erkenntnistheorie
Erkenntnistheorie Mäeutik
Ethik Mäeutik
Wissenschaftstheorie Bioethik
24Auswertung nicht-rekursiver Datalog-Regeln
- Ziel Auswertung der Datalog-Regel
-
- p(X1,,Xm) - q1(A11,,A1m1), , qn(An1,,Anmn).
- Topologische Sortierung Prädikate qi seien schon
zu Relationen Qi ausgewertet. Schema Qi
1,,mi . - Für jedes der Subgoals qi(Ai1,,Aimi) bilde den
folgenden Ausdruck der Relationenalgebra - Ei ? Vi ?i (? Pi ( ? Fi (Qi)))
- Die Pi sind die in qi() auftretenden
Variablenpositionen, Vi ist der im Subgoal an
Position i benutzte Variablenname (i ? Pi) und
Fi ist eine konjunktive Selektionsbedingung, die
wie folgt gebildet wird (s. nächste Folien).
25Auswertung nicht-rekursiver Datalog-Regeln
- Falls in qi(...,c,...) eine Konstante c an der
j-ten Stelle vorkommt, füge die Bedingung - j c
- zu Fi hinzu.
- Falls eine Variable X mehrfach an Positionen k
und l in qi(...,X,...,X,...) vorkommt, füge für
jedes solches Paar die Bedingung - k l
- zu Fi hinzu.
26Auswertung nicht-rekursiver Datalog-Regeln
- Für eine Variable Y, die nicht in den normalen
Prädikaten der Regel vorkommt, gibt es zwei
Möglichkeiten - Y kommt nur in einem Prädikat
- Y c
- für eine Konstante c vor. Dann wird eine
einstellige Relation mit einem Tupel - QY ?Y?1c
- für dieses Prädikat gebildet.
- Y kommt in einem Prädikat
- X Y
- vor, und X kommt in einem normalen Prädikat
qi(,X,) an kter Stelle vor. In diesem Fall
setze - QY ?Y?k (?k (Qi)) .
27Auswertung nicht-rekursiver Datalog-Regeln
- Bilde den natürlichen Verbund aller so
entstandenen Teilausdrücke - E E1 En
- Berechne dann ?F(E), wobei F die Konjunktion der
Vergleiche - X ? Y ist), die im Regelkörper vorkommen.
- Abschließend projiziere auf die Attribute, die
als Variablennamen im Kopf der Regeln (hier
p(X1,Xm)) auftauchen - ? X1,,Xm (?F(E))
- Sollte p über mehrere Regeln definiert sein,
vereinige die entstandenen Algebraausdrücke via ?.
28Beispiel Nahe verwandte Vorlesungen
- (r1) nvV(N1,N2) - gV(N1,N2).
- (r2) nvV(N1,N2) - gV(M1,M2),vs(M1,N1),vs(M2,
N2). - Dieses Beispielprogramm baut auf dem Prädikat gV
auf und ermittelt nahe verwandte Vorlesungen, die
einen gemeinsamen Vorgänger erster oder zweiter
Stufe haben. - Er1 ? N1?1,N2?2 (? 1,2 (?
TRUE (GV(1,2)))) - Kürzer Er1 GV(N1,N2)
- Er2 GV(M1,M2) Vs(M1,N1)
Vs(M2,N2) - Ergebnis
- Er1 ? Er2
29Auswertung rekursiver Regeln (hier Prädikat
aufbauen)
- a(V,N) - vs(V,N).
- a(V,N) - a(V,M),vs(M,N).
Aufbauen Aufbauen
V N
5001 5041
5001 5043
5001 5049
5041 5216
5041 5052
5043 5052
5052 5259
5001 5216
5001 5052
5001 5259
5041 5259
5043 5259
30Auswertung rekursiver Regeln
- Betrachten wir das Tupel 5001, 5052 aus der
Relation Aufbauen. Dieses Tupel kann wie folgt
hergeleitet werden - a (5001, 5043) folgt aus der ersten Regel, da
vs (5001, 5043) gemäß der EDB-Relation
Voraussetzen gilt. - a(5001, 5052) folgt aus der zweiten (rekursiven)
Regel, da - a(5001, 5043) nach Schritt 1. gilt und
- vs(5043, 5052) gemäß der EDB-Relation
Voraussetzen gilt. - Zur Auswertung von a() benötigen wir also Tupel
aus a() selbst, die zuvor berechnet wurden.
31"Naive" Auswertung durch Iteration
- Grundidee IDB-Relationen schrittweise bestimmen.
Starte mit leerer IDB-Relation, füge auf Basis
schon bekannter Tupel iterativ neue Tupel hinzu. - Abbruch der Iteration sobald Fixpunkt erreicht.
- A(V,N) Vs(V,N) ? ?V,N (A(V,M) Vs(M,N))
- A
- repeat
- A' A
- A Vs(V,N) / Regel 1 /
- A A ? ?V,N (A'(V,M) Vs(M,N)) / Regel
2/ - until A' A / Fixpunkt erreicht? /
- output A
32"Naive" Auswertung durch Iteration
- Iterationen
- Im ersten Durchlauf werden nur die 7 Tupel aus
Voraussetzen nach A "übertragen", da der Join
leer ist (das linke Argument A' des Joins wurde
zur leeren Relation initialisiert). - Im zweiten Schritt kommen zusätzlich die Tupel
5001,5216, 5001,5052, 5041,5259 und
5043,5259 hinzu. - Jetzt wird nur noch das Tupel 5001,5259 neu
generiert. - In diesem Schritt kommt kein neues Tupel mehr
hinzu, so dass die Abbruchbedingung A' A
erfüllt ist.
33(Naive) Auswertung der rekursiven Regel für
Prädikat 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,52595001,5216, 5001,5052, 5041,5259, 5043,5259,
3 5001,5041, 5001,5043, 5001,5049, 5041,5216, 5041,5052, 5043,5052, 5052,52595001,5216, 5001,5052, 5041,5259, 5043,5259, 5001,5259
4 wie in Schritt 3 (keine Veränderung, also Terminierung des Algorithmus
34(No Transcript)
35Inkrementelle (semi-naive) Auswertung rekursiver
Regeln
- Während der iterativen Auswertung des rekursiven
Prädikates p sei folgende Regel für die
Generierung eines neuen Tupels t
"verantwortlich" - p() - q1(), , qn().
- In der iterativen Auswertung wurde dazu ein
Relationenalgebra-Ausdruck der Form - E(Q1 Qn)
- ausgewertet.
- Das neue Tupel t entstehe in Iteration k auf
Basis der Tupel - t1 ? Q1, , tn ? Qn. Dann muss eines dieser ti
? Qi in Iteration (k-1) neu generiert worden
sein. Seien ?Qi die in Iteration - (k-1) erstmals generierten Tupel. Dann wird t
also auch von diesem Ausdruck erzeugt - E(Q1 ?Qi Qn)
36Inkrementelle (semi-naive) Auswertung rekursiver
Regeln
- Aber aus welchem spezifischen Qi stammt dieses
Tupel ti? - ? Betrachte die ? aller Subgoal-Relationen
gesondert. Berechne - In jedem Teilausdruck der Vereinigung darf
jeweils nur ein ? einer Subgoal-Relation
eingesetzt werden. Falls die t1,, - ti-1,ti1,,tn in Schritten lt k erzeugt wurden,
ist sichergestellt, daß t durch - E(Q1 ?Qi Qn)
- erzeugt wird.
E(?Q1 Qi Qn)
? ? E(Q1 ?Qi Qn) ? ?
E(Q1 Qi ?Qn)
37Inkrementelle (semi-naive) Auswertung rekursiver
Regeln
- Beispiel In der iterativen Auswertung von
Prädikat aufbauen (Relation A), wurde folgendes
Tupel t in der 3. Iteration generiert - t 5001, 5259
- Tupel t entstand aus dem folgenden Join zweier
Tupel - 5001, 5052 5052, 5259
- Dabei wurde 5001, 5052 ? A in Iteration 2
generiert. Tupel - 5052, 5259 ist der Teil der (invarianten)
EDB-Relation Vs.
38Algorithmus zur semi-naiven Auswertung von
Prädikat aufbauen
- ?Vs(V,N)
- A(V,N) Vs(V,N)
- A(V,N) A(V,N) ? ? V,N (A(V,M) Vs(M,N))
- ?A(V,N) A(V,N)
- repeat
- ?A' (V,N) ?A(V,N) / ?A' im letzten Schritt
neu gen. Tupel / - ?A(V,N) ?Vs(V,N)
- ?A(V,N) ?A(V,N) ?
- ?V,N (?A'(V,M) Vs(M,N)) ?
- ?V,N (A(V,M) ?Vs(M,N))
- ?A(V,N) ?A(V,N) \ A(V,N) / nur
tatsächlich neue Tupel / - A(V,N) A(V,N) ? ?A(V,N) / akkumuliere
Endergebnis / - until ?A(V,N)
- Bemerkung ?Vs(V,N) bleibt während der Berechnung
- (EDB-Relationen sind invariant).
39Illustration der semi-naiven Auswertung von
aufbauen
Schritt ?A
Initialisierung (Zeile 2. und 3.) (7 Tupel aus Vs) 5001,5042, 5001,5043 5043,5052, 5041,5052 5001,5049, 5001,5216 5052,5259
1. Iteration (Pfade der Länge 2) 5001,5216, 5001,5052 5041,5259, 5043,5259
2. Iteration (Pfade der Länge 3) 5001,5259
3. Iteration (Terminierung)
40Bottom-Up oder Top-Down Auswertung?
- Die bisher beschriebene bottom-up Auswertung
leitet die IDB - aus den EDB-Relationen ab.
- (Optimierbare) Ausdrücke der relationalen Algebra
berechnen - neue Tupel der IDB aus vorhergehenden
Ableitungen. - Achtung Es wird aber jeweils die gesamte IDB
abgeleitet ? - obwohl für Beantwortung einer Query oft ein
Ausschnitt - ausreichend ist
- (r1) a (V, N) - vs (V, N).
- (r2) a (V, N) - a (V, M), vs (M, N).
- query (V ) - a (V, 5052).
41Relevanter Ausschnitt der EDB-Relation
Voraussetzen für query(V) - a(V, 5052)
5259 (WienerKreis)
5052 (Wiss. Theorie)
5216 (Bioethik)
5043 (Erk. Theorie)
5049 (Mäeutik)
5041 (Ethik)
5001 (Grundzüge)
42Rule/Goal-Baum zur Top-Down Auswertung
a(V,5052)
(r2) a(V,5052) - a(V,M1),vs(M1,5052)
(r1) a(V,5052) - vs(V,5052)
Bindungen für V aus EDB
vs(V,5052)
vs(M1,5052)
a(V,M1)
(r1) a(V,M1) - vs(V,M1)
(r2) a(V,M1) - a(V,M2),v2(M2,M1)
vs(V,M1)
vs(M2,M1)
a(V,M2)
43Rule/Goal-Baum mit Auswertung
a(V,5052)
(r1) a(V,5052) - vs(V,5052)
(r2) a(V,5052) - a(V,M1),vs(M1,5052)
vs(V,5052)
vs(M1,5052)
a(V,M1)
M1 ? 5041,5043
V ? 5041,5043
(r2) a(V,M1) - a(V,M2),v2(M2,M1)
(r1) a(V,M1) - vs(V,M1)
vs(M2,M1)
a(V,M2)
vs(V,M1)
M2 ? 5001
V ? 5001
V ? Ø
44Negation (?) im Regelrumpf und Stratifikation
- indirektAufbauen(V,N) - aufbauen(V,N),
?voraussetzen(V,N). - Eine Regel r mit einem negierten Prädikat im
Rumpf, wie z.B. - r ? p (...) - q1 (...), ..., ?qi (...), ..., qn
(...). - kann nur dann sinnvoll ausgewertet werden, wenn
Relation Qi schon vollständig
materialisiert ist (t ? Qi?). Dazu müssen zuerst
alle Regeln mit Kopf qi (...) - ...
ausgewertet sein. - Das ist nur möglich, falls qi nicht abhängig von
p ist. - Also darf der Abhängigkeitsgraph keine Pfade von
qi nach p enthalten. Wenn das für alle
Regeln und negierten Subgoals der Fall ist, ist
das Datalog-Programm stratifiziert. - Achtung, Sicherheit In ?qi (,V,) ist Variable
V nicht beschränkt. (Warum?)
45Beispiel Auswertung einer Regel mit Negation
- Auszuwertende Regel (ist das Programm
stratifiziert?) -
- iA (V,N) - a (V,N), ?vs (V,N).
- Ausdruck der relationalen Algebra hierzu
- IA (V,N) ? V,N ( A (V,N) Vs (V,N) )
- A(V,N) - Vs (V,N)
- Berechnung von IA(V,N) jetzt einfach aus Basis
von bereits materialsierter IDB-Relation A(V,N)
und EDB-Relation Vs(V,N). - Wieso gilt eigentlich ?
46Komplexeres Beispiel Regel mit Negation
- grundlagen(V) - voraussetzen(V,N).
- spezialVorl(V) - vorlesungen(V,T,S,R), ?
grundlagen(V). - Äquivalente Ausdrücke der relationalen Algebra
- Grundlagen(V) ?V (Voraussetzen(V,N))
- SpezialVorl(V) ?V (Vorlesungen(V,T,S,R)
Grundlagen(V)) - Wie ist hier das Komplement von Grundlagen(V) zu
bestimmen? (Projektion ?V unter den
verschieben projection pushdown) - Falls pushdown unmöglich ist Konstruktion der
aktiven Domäne (DOM, s. Buch).
47Ausdruckskraft von Datalog
- Die Sprache Datalog, eingeschränkt auf
nicht-rekursive Programme aber erweitert um
Negation, wird in der Literatur manchmal als
Datalog ?non-rec bezeichnet - Diese Sprache Datalog? non-rec hat genau die
gleiche Ausdruckskraft wie die relationale
Algebra und damit ist sie hinsichtlich
Ausdruckskraft auch äquivalent zum relationalen
Tupel- und Domänenkalkül. - Datalog mit Negation und Rekursion geht natürlich
über die Ausdruckskraft der relationalen Algebra
hinaus man konnte in Datalog ja z.B. die
transitive Hülle der Relation Voraussetzen
definieren (repeat until nicht in relationaler
Algebra verfügbar).
48Simulation der relationalen Algebra in Datalog
- Selektion
- ? SWS gt 3 (Vorlesungen) ? Titel "Mäeutik"
(Vorlesungen) - In Datalog
- query1(V,T,S,R) - vorlesungen(V,T,S,R), S gt 3.
- query2(V,T,S,R) - vorlesungen(V,"Mäeutik",S,R).
- Projektion
- ? Name, Rang (Professoren)
- In Datalog
- query(Name,Rang) - professoren(PersNr,Name,
Rang, Raum).
49Simulation der relationalen Algebra in Datalog
- Kreuzprodukt
- Professoren ? Vorlesungen
- In Datalog
- query(V1,V2,V3,V4,P1,P2,P3,P4) -
professoren(P1,P2,P3,P4), - vorlesungen(V1,V2,V3,V4).
- ?-Join (hier mit Projektion)
- ?Titel,Name(Vorlesungen gelesenVonPersNr
Professoren) - In Datalog
-
- query(T,N) - vorlesungen(V,T,S,R),
professoren(R,N,Rg,Ra).
50Simulation der relationalen Algebra in Datalog
- Vereinigung (von Relationen identischer Schemata)
- ? PersNr, Name (Assistenten) ? ? PersNr,Name
(Professoren) - In Datalog
- query(PersNr,Name) - assistenten(PersNr,Name,F,
B). - query(PersNr,Name) - professoren(PersNr,Name,Rg
,Ra). - Differenz
- ?VorlNr (Vorlesungen) ? ?VorlNr (Voraussetzen)
- In Datalog
- query1(V) - vorlesungen(V,T,S,R).
- query2(V) - voraussetzen(V,N).
- query(V) - query1(V), ? query2(V).