1 Datenbanken und DATALOG

Werbung
Deduktive Datenbanken
1
Sommersemester 2012
Datenbanken und DATALOG
Dieser Abschnitt gibt zunächst eine kurze Einführung zu einigen Grundlagen
relationaler Datenbanken.
Danach werden die zwei Gesichter der Logikprogrammierung vorgestellt:
2 Bei der deduktiven Datenbanksprache DATALOG steht der deklarative
Aspekt im Vordergrund. Hier wird eine Datenbank über
Verwandtschaftsbeziehungen betrachtet.
2 Bei der Programmiersprache P ROLOG (Kapitel 2) steht der prozedurale
Aspekt im Vordergrund. Neben einigen elementaren, kleinen
P ROLOG–Beispielen werden als größere Programmierbeispiele binäre
Suchbäume, Stücklisten und Firmenbeteiligungen behandelt.
Prof. Dr. Dietmar Seipel
41
Deduktive Datenbanken
1.1
Sommersemester 2012
Grundbegriffe des relationalen Datenmodells
1.1.1 Relationen und Relationenschemata
2 Attribute: A1 , . . . , An , Domänen: D1 , . . . , Dn
2 Relation: R, mit R ⊆ D1 × . . . × Dn
2 Stelligkeit: n, Kardinalität: |R| (Spalten–, Zeilenanzahl)
2 Tupel: h d1 , . . . , dn i ∈ R
2 Relationenschema: RS = h V, K, Not_Null i, mit
– Attributmenge V = { A1 , . . . , An },
– Primärschlüssel K ⊆ V,
– Menge Not_Null von Attributen, die bekannt sein müssen.
Prof. Dr. Dietmar Seipel
42
Deduktive Datenbanken
Sommersemester 2012
Beispiel (C OMPANY–Datenbank)
Relationenschemata:
E MPLOYEE
= h { L NAME, S SN, B DATE, S EX, S ALARY, S UPERSSN, D NO },
{ S SN }, { S SN, E NAME } i
D EPARTMENT = h { D NAME, D NUMBER, M GRSSN, M GRSTARTDATE },
{ D NUMBER }, { D NUMBER, D NAME } i
W ORKS _O N
= h { E SSN, P NO, H OURS },
{ E SSN, P NO }, { E SSN, P NO } i
P ROJECT
= h { P NAME, P NUMBER, P LOCATION, D NUM },
{ P NUMBER }, { P NUMBER, P NAME } i
Es folgen Relationen dazu.
Prof. Dr. Dietmar Seipel
43
Deduktive Datenbanken
Sommersemester 2012
E MPLOYEE
L NAME
S SN
B DATE
S EX
S ALARY
S UPERSSN
D NO
Smith
1111
1955–01–09
M
30000
3333
5
Wong
3333
1945–12–08
M
40000
5555
5
Zelaya
2222
1958–07–19
F
25000
7777
4
Wallace
7777
1931–06–20
F
43000
5555
4
Narayan
6666
1952–09–15
M
38000
3333
5
English
4444
1962–07–31
F
25000
3333
5
Jabbar
8888
1959–03–29
M
25000
7777
4
Borg
5555
1927–11–10
M
55000
NULL
1
D EPARTMENT
Prof. Dr. Dietmar Seipel
D NAME
D NUMBER
M GRSSN
M GRSTARTDATE
Research
5
3333
1978–05–22
Administration
4
7777
1985–01–01
Headquarters
1
5555
1971–06–19
44
Deduktive Datenbanken
Sommersemester 2012
W ORKS _O N
E SSN
P NO
H OURS
1111
1
32.5
4444
1
20.0
1111
2
7.5
3333
2
10.0
6666
2
20.0
2222
10
10.0
8888
10
35.5
5555
20
NULL
7777
30
20.0
8888
30
15.0
Prof. Dr. Dietmar Seipel
P ROJECT
P NAME
P NUMBER
P LOCATION
D NUM
Product X
1
Bellaire
5
Product Y
2
Sugarland
5
Computerization
10
Stafford
4
Reorganization
20
Houston
1
New Benefits
30
Stafford
4
45
Deduktive Datenbanken
Sommersemester 2012
Data Dictionary in X ML:
Mithilfe der P ROLOG–Bibliothek D DK können wir das Data Dictionary einer
relationalen Datenbank (z.B. MySQL) in eine X ML–Repräsentation
transformieren:
<database name="company">
<table name="department"> ... </table>
<table name="employee"> ... </table>
<table name="dependent"> ... </table>
<table name="dept_locations"> ... </table>
<table name="project"> ... </table>
<table name="works_on"> ... </table>
</database>
Prof. Dr. Dietmar Seipel
46
Deduktive Datenbanken
Sommersemester 2012
<table name="employee">
<attribute name="LNAME" type="varchar(15)" is_nullable="NO"/>
<attribute name="SSN" type="varchar(9)" is_nullable="NO"/>
<attribute name="BDATE" type="date" is_nullable="YES"/>
<attribute name="SEX" type="char(1)" is_nullable="YES"/>
<attribute name="SALARY" type="decimal(10,2)" is_nullable="YES"/>
<attribute name="SUPERSSN" type="varchar(9)" is_nullable="YES"/>
<attribute name="DNO" type="int(11)" is_nullable="NO"/>
<primary_key> <attribute name="SSN"/> </primary_key>
<foreign_key> <attribute name="SUPERSSN"/>
<references table="employee">
<attribute name="SSN"/> </references> </foreign_key>
<foreign_key> <attribute name="DNO"/>
<references table="department"> <attribute name="DNUMBER"/>
</references> </foreign_key>
</table>
Prof. Dr. Dietmar Seipel
47
Deduktive Datenbanken
Sommersemester 2012
1.1.2 Relationale Anfragesprachen
Eine Anfrage (Query) spezifiziert Daten, welche aus der Datenbank abgeleitet
werden sollen.
2 Relationenalgebra:
interne Repräsentation von Anfragen
mengen–orientiert
2 Relationenkalkül:
Anfragen als Formeln der Prädikatenlogik erster Stufe (PL1)
tupel–orientiert, deklarativ (nicht prozedural)
Grundlage der relationalen Anfragesprache SQL
weitere Anfragesprachen: QUEL, QBE, DATALOG
Prof. Dr. Dietmar Seipel
48
Deduktive Datenbanken
Sommersemester 2012
Die Relationenalgebra
Positive Relationenalgebra RA+ :
2 Selektion σF (R),
2 Projektion ΠAi1 ,...,Aik (R), 1 ≤ i1 , . . . , ik ≤ n
2 kartesisches Produkt R × S
2 Vereinigung R ∪ S
die Erweiterung der positiven Relationenalgebra RA+ um
2 Differenz R \ S
ist relational vollständig, d.h. gleichmächtig wie das Relationenkalkül
Prof. Dr. Dietmar Seipel
49
Deduktive Datenbanken
Sommersemester 2012
Beispiel (RA)
Basisrelationen
R
Prof. Dr. Dietmar Seipel
A1
A2
A3
a
b
c
a
b
d
b
c
d
S
T
B1
B2
B1
B2
a
b
b
c
b
c
c
d
50
Deduktive Datenbanken
Sommersemester 2012
Grundlegende Operationen
σA1 =a (R)
S∪T
A2
A3
B1
B2
a
b
c
a
b
A1
A2
A3
B1
B2
a
b
d
b
c
a
b
c
a
b
c
d
a
b
c
b
c
a
b
d
a
b
a
b
d
b
c
b
c
d
a
b
b
c
d
b
c
Selektion
Vereinigung
ΠA1 ,A2 R
A1
A2
a
b
B1
B2
b
c
a
b
Projektion
Prof. Dr. Dietmar Seipel
R×S
A1
S\T
Kartesisches Produkt
Differenz
51
Deduktive Datenbanken
Sommersemester 2012
Joins
2 Join R ⊲⊳F S = σF (R × S) ⊆ R × S
F : Joinbedingung
2 natürlicher Join UR = { A1 , A2 }, US = { A2 , A3 }
R ⊲⊳ S = ΠA1 ,A2 ,A3 (σR.A2 =S.A2 (R × S))
2 Komposition binärer Relationen mit US = UT = { B1 , B2 }
S ◦ T = ΠS.B1 ,T.B2 (S ⊲⊳S.B2 =T.B1 T )
In der Prädikatenlogik: st(X , Y ) ← s(X, Z) ∧ t(Z, Y )
2 Semijoin R ⋉F S = ΠUR (R ⊲⊳F S)
2 natürlicher Semijoin R ⋉ S = ΠUR (R ⊲⊳ S)
Prof. Dr. Dietmar Seipel
52
Deduktive Datenbanken
Sommersemester 2012
Beispiel (RA)
Abgeleitete Operationen
R ⊲⊳A2 =B2 S
R ⋉A1 =B1 T
A1
A2
A3
B1
B2
a
b
c
a
b
A1
a
b
d
a
b
b
b
c
d
b
c
Join
Prof. Dr. Dietmar Seipel
A2
A3
c
Semijoin
d
S◦T
B1
B2
a
c
b
d
Komposition
53
Deduktive Datenbanken
Sommersemester 2012
Die Anfragesprache S QL
S QL–Anfrage (eventuell geschachtelt):
S ELECT
h attribute list i
F ROM
h relations i
W HERE
{ h predicate i | h attribute list i I N h query block i }
2 Das S ELECT–Statement stellt eine Projektion auf die h attribute list i dar.
2 Mit dem F ROM– und dem W HERE–Statement kann man Joins bilden,
wobei F ROM dazu dient, das kartesische Produkt zu bilden, und mit der
W HERE–Anweisung Selektionen durchgeführt werden können.
Prof. Dr. Dietmar Seipel
54
Deduktive Datenbanken
Sommersemester 2012
Beispiel (S QL)
Die folgende S QL–Anfrage liefert alle Angestellten der Abteilung 5,
die mindestens 30.000 Dollar verdienen:
S ELECT L NAME
F ROM E MPLOYEE
W HERE S ALARY >= 30000
A ND D NO = 5
Sie entspricht dem folgenden Ausdruck der relationalen Algebra:
ΠL NAME (σS ALARY ≥ 30000 ∧ D NO = 5 (E MPLOYEE ))
In der Prädikatenlogik:
select(Lname) ← employee(Lname, _, _, _, S , _, 5 ) ∧ S ≥ 30000
Prof. Dr. Dietmar Seipel
55
Deduktive Datenbanken
Sommersemester 2012
Das folgende S ELECT–F ROM –W HERE–Statement findet für alle Projekte die
Summe der geleisteten Arbeitsstunden (Aggregation):
S ELECT P NAME , SUM (H OURS )
F ROM P ROJECT, W ORKS _O N
W HERE P ROJECT.P NUMBER = W ORKS _O N .P N O
G ROUP B Y P NAME
View:
Relation, die nicht explizit in der Datenbank gespeichert sondern mittels
eines Ausdruckes aus der Anfragesprache definiert ist.
Dieser Ausdruck kann sich auf Datenbankrelationen und/oder auch wieder
auf Views stützen.
Die transitive Hülle einer binären Relation (eines Graphen) kann in
Standard–S QL leider nicht berechnet werden – wohl aber in DATALOG.
Prof. Dr. Dietmar Seipel
56
Deduktive Datenbanken
Sommersemester 2012
G:
Graphentheoretische Grundlagen
2 Ein Graph G = (N, E) ist gegeben durch:
– Knoten N = { a, . . . , g },
a f -g
6R
c
b
R
e
d
– Kanten E = { (a, b), (a, c), (c, d), (c, e), (d, a), (f, g) }.
2 Die transitive Hülle G + = (N, E + ) enthält eine Kante (v, w), falls w von v
aus über einen gerichteten Weg positiver Länge erreichbar ist:
– Kanten E + = E ∪ { (a, e), (a, a), (c, c), (d, d) }.
– a, c und d liegen auf einem Kreis. Deswegen sind diese Knoten von sich
selbst aus über einen gerichteten Weg positiver Länge erreichbar.
2 Die reflexive, transitive Hülle G ∗ = (N, E ∗ ) enthält eine Kante (v, w), falls
w von v aus über einen gerichteten Weg beliebiger Länge erreichbar ist:
– Kanten E ∗ = E + ∪ { (b, b), (e, e), (f, f ), (g, g) }.
– Für alle Knoten v gilt (v, v) ∈ E ∗ .
Prof. Dr. Dietmar Seipel
57
Deduktive Datenbanken
1.2
Sommersemester 2012
Die deduktive Datenbanksprache DATALOG
In DATALOGfun werden – wie in der Logik – Terme und Atome aus Konstanten,
Variablen und Funktionssymbolen bzw. Prädikatensymbolen gebildet.
Konstanten beginnen mit einem Kleinbuchstaben, sind in Hochkommatas
eingeschlossen oder Zahlen:
z.B. book, ’Book’, 0, 123.
Variablen sind Zeichenketten, die mit einem Großbuchstaben oder dem
Unterstrich “_” beginnen:
z.B. X, Y, Book, _, _A, _a.
Die Unterscheidung zwischen Konstanten und Variablen erfolgt also auf
syntaktischer Ebene, ohne daß man dies explizit deklarieren muß.
Prof. Dr. Dietmar Seipel
58
Deduktive Datenbanken
Sommersemester 2012
Man unterscheidet Zahlen (wie 23 ) von Zeichenketten (wie ’23’ ).
Bei Zahlen sind führende Nullen bedeutungslos (es gilt 023 = 23 ),
bei Zeichenketten haben sie eine Bedeutung (hier gilt ’023’ 6= ’23’ ).
Prädikatensymbole und Funktionssymbole sind Funktoren.
Funktoren sind Zeichenketten, die mit einem Kleinbuchstaben beginnen oder
in Hochkommatas eingeschlossen sind, oder Folgen von Sonderzeichen:
z.B. ancestor, ’Parent’, true, ->.
Daraus kann man dann in DATALOG bzw. DATALOGfun Terme, Atome und
Formeln bilden. Diese in der Logik gebräuchliche Unterscheidung wird in
P ROLOG aufgehoben; man spricht hier allgemeiner von Strukturen.
Prof. Dr. Dietmar Seipel
59
Deduktive Datenbanken
Sommersemester 2012
Terme:
2 Variablen und Konstanten sind Terme.
2 Falls t1 , . . . , tn Terme sind und f ein Funktionssymbol, dann ist auch
f (t1 , . . . , tn ) ein Term.
Man nennt n die Stelligkeit eines Terms f (t1 , . . . , tn ).
Ein 0–stelliger Term f () wird (abgekürzt) als f notiert und als Konstante
betrachtet.
Dann sind “+(X, 123)” und “log(3)” Terme.
Anstelle der Präfix–Notation kann man oft auch die Infix–Notation
schreiben: “X + 123”.
In DATALOG sind dagegen keine Funktionssymbole erlaubt, d.h. Terme sind
entweder Konstanten oder Variablen.
Prof. Dr. Dietmar Seipel
60
Deduktive Datenbanken
Sommersemester 2012
Atome werden nun entsprechend aus Termen und Prädikatensymbolen
gebildet:
2 Ein Prädikatensymbol p hat dabei eine Stelligkeit n.
2 Falls t1 , . . . , tn Terme sind, dann ist p(t1 , . . . , tn ) ein Atom.
Z.B. ancestor(charles, george).
2 Falls das Prädikatensymbol p die Stelligekit n = 0 hat, so schreiben wir
kurz p anstelle von p(): z.B. true.
Atome können – anders als Terme – nicht ineinander verschachtelt sein.
Formeln:
2 Atome sind in DATALOG Fakten.
2 Komplexere Formeln (Regeln) können aus den Atomen mit Hilfe der
Junktoren “←” und “∧” (und) gebildet werden.
2 In DATALOGnot ist zusätzlich “not” (Default Negation) erlaubt.
Prof. Dr. Dietmar Seipel
61
Deduktive Datenbanken
Sommersemester 2012
Überladung:
Ein Symbol kann sowohl als Funktionssymbol als auch als Prädikatensymbol
auftreten; außerdem kann es mit unterschiedlichen Stelligkeiten auftreten.
2 Im Atom parent(mother(anne), goerge) wird mother als einstelliges
Funktionssymbol betrachtet und mother(anne) als Term.
Die Bedeutung des Atoms könnte sein, daß goerge ein Elternteil der Mutter
von anne ist.
2 Steht mother(anne) alleine, so wird es als Atom betrachtet, und mother als
Prädikatensymbol. Die Bedeutung könnte dann sein, daß anne eine Mutter
ist.
2 Theoretisch ist sogar ein Atom mother(mother(mother)) möglich, in dem
mother – je nach Position – ein Prädikaten–, Funktions–, bzw.
Konstantensymbol ist.
Prof. Dr. Dietmar Seipel
62
Deduktive Datenbanken
Sommersemester 2012
Domain Specific Language (DSL):
Mithilfe von Infix–Funktoren, die man in P ROLOG definieren kann, kann man
sich auf einfache Weise eine leichter zu lesende DSL schaffen, ohne dafür einen
eigenen Parser schreiben zu müssen.
Wenn man z.B. likes als zweistelligen Infix–Funktor in P ROLOG definiert,
dann kann man fast wie in natürlicher Sprache
’John’ likes ’Mary’
anstelle von likes(’John’, ’Mary’) schreiben.
Prof. Dr. Dietmar Seipel
63
Deduktive Datenbanken
Sommersemester 2012
1.2.1 Regeln und Fakten
Prädikatensymbole: parent, grandparent, ancestor , alle 2–stellig
Regeln: Kopf ← Rumpf , man sagt “ Kopf falls Rumpf ”
Rumpf ist Konjunktion von Atomen oder deren Negation
grandparent(X , Z ) ← parent(X , Y ) ∧ parent(Y , Z )
ancestor (X , Y ) ← parent(X , Y )
ancestor (X , Z ) ← ancestor (X , Y ) ∧ parent(Y , Z )
Bedeutung:
∀X ∀Y ∀Z ((ancestor(X, Y ) ∧ parent(Y, Z)) → ancestor(X, Z))
Fakten:
parent(’Elizabeth’, ’George’)
parent(’Charles’, ’Elizabeth’)
parent(’William’, ’Charles’)
Prof. Dr. Dietmar Seipel
64
Deduktive Datenbanken
Sommersemester 2012
Familienstammbaum
-
Charles
Diana
George
- Elizabeth
Philip
-
- William
-
Harry
Anne
- Andrew
-
Edward
Der Familienstammbaum umfaßt 4 Generationen; Frauen sind in Rot, Männer in
Blau angezeigt.
Prof. Dr. Dietmar Seipel
65
Deduktive Datenbanken
Sommersemester 2012
Ableitung: Bottom–Up, Forward Chaining
In DATALOG (ohne Negation) werden Regeln bottom–up ausgewertet:
aus den bekannten Fakten für die Rumpfatome einer Regel werden neue Fakten
für das Kopfatom der Regel abgeleitet (Forward Chaining).
2 Man ersetzt die Variablen in einer Regel durch geeignete Konstanten.
2 Falls die Rumpfatome B1 , . . . , Bn der so erhaltenen Regel
A ← B1 ∧ . . . ∧ Bn
bereits bekannt sind, dann kann man das Kopfatom A ableiten.
In der Praxis findet man die geeigneten Konstanten indem man der Reihe nach
passende, bereits bekannte Atome Bi (1 ≤ i ≤ n) für den Regelrumpf sucht.
Prof. Dr. Dietmar Seipel
66
Deduktive Datenbanken
Sommersemester 2012
Z
Man kann mittels der Regel
grandparent(X , Z ) ← parent(X , Y ) ∧ parent(Y , Z )
z.B. folgende neuen Fakten ableiten.
I
parent 6
Y grandparent
parent 6
X
Dazu ersetzt man die Variablen der Regel wie folgt:
2 Für { X 7→ ’Charles’, Y 7→ ’Elizabeth’, Z 7→ ’George’ } erhalten wir
grandparent(’Charles’, ’George’) ←
parent(’Charles’, ’Elizabeth’) ∧ parent(’Elizabeth’, ’George’).
Mit Hilfe der entsprechenden Fakten aus dem Regelrumpf kann man dann
grandparent(’Charles’, ’George’) ableiten.
2 Für { X 7→ ’William’, Y 7→ ’Charles’, Z 7→ ’Elizabeth’ } kann man
grandparent(’William’, ’Elizabeth’) ableiten.
Prof. Dr. Dietmar Seipel
67
Deduktive Datenbanken
Sommersemester 2012
Die Menge aller Fakten zu einem n–stelligen Prädikat entspricht einer
n–stelligen Relation.
Falls parent als zweispaltige Relation PARENT realisiert wäre, so könnte man die
Relation G RANDPARENT zu grandparent wie folgt in S QL berechnen:
C REATE V IEW G RANDPARENT (NAME , G RANDPARENT ) A S
S ELECT P1.NAME , P2.PARENT
F ROM PARENT P1, PARENT P2
W HERE P1.PARENT = P2.NAME
PARENT
NAME
PARENT
Elizabeth
George
Charles
Elizabeth
William
Charles
Prof. Dr. Dietmar Seipel
G RANDPARENT
NAME
G RANDPARENT
Charles
George
William
Elizabeth
68
Deduktive Datenbanken
Sommersemester 2012
Nested–Loop–Join in S QL:
2 Die äußere Schleife durchläuft alle Tupel P1 von PARENT (unten links).
2 Die innere Schleife testet für jedes solche Tupel wiederum alle Tupel P2 von
PARENT (unten rechts) auf die Bedingung P1.PARENT = P2.NAME.
PARENT
PARENT
NAME
PARENT
NAME
PARENT
Elizabeth
Queen Mum
Elizabeth
Queen Mum
Elizabeth
George
Elizabeth
George
Charles
Elizabeth
Charles
Elizabeth
William
Charles
William
Charles
Falls es einen Index über NAME gibt, so können sehr schnell die (jeweils
maximal zwei) passenden Tupel für P2 gefunden werden.
Prof. Dr. Dietmar Seipel
69
Deduktive Datenbanken
Sommersemester 2012
Transformiert man ein S ELECT–Statement nach DATALOG so ergibt sich
folgendes:
2 der S ELECT–Teil entspricht dem Regelkopf,
2 der F ROM–Teil entspricht den Prädikaten im Regelrumpf,
2 Gleicheitsbedingungen aus dem W HERE–Teil können direkt durch gleiche
DATALOG–Variablen ausgedrückt oder wie alle weiteren arithmetischen
Bedingungen in den Regelrumpf übernommen werden.
In DATALOG erfolgt die Selektion nicht über Attribute, sondern über die
Argumentposition.
Die Relation A NCESTOR kann man in S QL im allgemeinen nicht berechnen, da
man nicht weis wieviele Stufen die zugrunde liegende Relation PARENT hat.
Prof. Dr. Dietmar Seipel
70
Deduktive Datenbanken
Sommersemester 2012
Der S QL–View zur Berechnung der Relation A NCESTOR wäre rekursiv, da er
sich im zweiten S ELECT–Statement wieder auf A NCESTOR selbst bezieht:
C REATE V IEW A NCESTOR (NAME , A NCESTOR ) A S
S ELECT * F ROM PARENT
U NION
S ELECT A NCESTOR .NAME , PARENT.PARENT
F ROM PARENT, A NCESTOR
W HERE A NCESTOR .A NCESTOR = PARENT.NAME
Die den beiden Regeln für ancestor entsprechenden S ELECT–Statements werden
mittels U NION vereinigt.
Rekursive Views sind in Standard–S QL nicht erlaubt.
Es gibt allerdings S QL–Erweiterungen, in denen spezielle, einfache rekursive
Views wie der obige erlaubt sind.
Prof. Dr. Dietmar Seipel
71
Deduktive Datenbanken
Sommersemester 2012
In DATALOG werden die folgenden Fakten berechnet:
2 Zuerst berechnet die Regel ancestor (X , Y ) ← parent(X , Y ) die neuen
Fakten ancestor (’Elizabeth’, ’George’), ancestor (’Charles’, ’Elizabeth’),
und ancestor (’William’, ’Charles’).
George
2 Danach berechnet die Regel
ancestor (X , Z ) ← ancestor (X , Y ) ∧ parent(Y , Z )
aus diesen Fakten und den parent–Fakten die Fakten
1
6
Y
2 Elizabeth
1 I 3
6
Charles 2
1
6
William
ancestor (’Charles’, ’George’), ancestor (’William’, ’Elizabeth’),
2 und schließlich wiederum daraus ancestor (’William’, ’George’).
2 Falls es mehr als drei Stufen in PARENT gäbe, so würde diese Regel weiter
angewendet bis keine neuen Fakten mehr abgeleitet werden können.
Prof. Dr. Dietmar Seipel
72
Deduktive Datenbanken
Sommersemester 2012
Extensionale und intensionale Datenbank, Anfragen
2 EDB: relationale Datenbank
2 IDB: wird aus der EDB mit Hilfe von Regeln abgeleitet,
ist nicht explizit gespeichert (vgl. Views in relationalen Datenbanken)
2 Rekursive Regeln erlauben es, wichtige IDB–Relationen auszudrücken
(etwa A NCESTOR), die man sonst nicht so einfach ausdrücken könnte.
2 Regeln können in DATALOG effizient abgearbeitet werden;
ein P ROLOG–Interpreter würde viele Resultats–Tupel zu einer Query
mehrfach generieren und möglicherweise nicht terminieren.
2 Anfragen werden in Form von Regeln ohne Kopfatom, sogenannten Zielen
(Goals), repräsentiert.
Prof. Dr. Dietmar Seipel
73
Deduktive Datenbanken
Sommersemester 2012
Beispiel (Extensionale und intensionale Datenbbank, Anfragen)
EDB
P ERSON
NAME
B ORN
S EX
Anne
1950
female
Andrew
1960
male
Charles
1948
male
Diana
1961
female
Edward
1964
male
Elizabeth
1926
female
Harry
1984
male
Philip
1921
male
William
1982
male
Prof. Dr. Dietmar Seipel
PARENTS
NAME
M OTHER
FATHER
Anne
Elizabeth
Philip
Andrew
Elizabeth
Philip
Charles
Elizabeth
Philip
Edward
Elizabeth
Philip
Harry
Diana
Charles
William
Diana
Charles
74
Deduktive Datenbanken
Sommersemester 2012
in DATALOG erhält man ein Fakt pro Tupel der Datenbank:
person(’Anne’, 1950, female).
person(’Andrew’, 1960, male).
person(’Charles’, 1948, male).
person(’Diana’, 1961, female).
person(’Edward’, 1964, male).
person(’Elizabeth’, 1926, female).
person(’Harry’, 1984, male).
person(’Philip’, 1921, male).
person(’William’, 1982, male).
parents(’Anne’, ’Elizabeth’, ’Philip’).
parents(’Andrew’, ’Elizabeth’, ’Philip’).
parents(’Charles’, ’Elizabeth’, ’Philip’).
parents(’Edward’, ’Elizabeth’, ’Philip’).
parents(’Harry’, ’Diana’, ’Charles’).
parents(’William’, ’Diana’, ’Charles’).
Prof. Dr. Dietmar Seipel
75
Deduktive Datenbanken
Sommersemester 2012
Mit den folgenden Regeln können die bisherigen Tabellen als IDB–Tabellen
daraus hergeleitet werden:
mother (X , Y ) ← parents(X , Y , _)
father (X , Y ) ← parents(X , _, Y )
parent(X , Y ) ← mother (X , Y )
parent(X , Y ) ← father (X , Y )
Die Mutter Y einer Person X steht an der zweiten Position, der Vater an der
dritten Position in den parents–Fakten.
In den Regeln für mother und father ist die jeweils andere Position der
parents–Fakten mit einer anonymen Variable “_” belegt.
Diese fungiert als Wildcard und drückt aus, daß der Wert an dieser Position für
die entsprechende Regel irrelevant ist. Wie üblich steht jedes Auftreten einer
anonymen Variable für einen separaten Wert.
Prof. Dr. Dietmar Seipel
76
Deduktive Datenbanken
Sommersemester 2012
Die weiteren IDB–Tabellen können daraus dann wie folgt hergeleitet werden:
grandparent(X , Z ) ← parent(X , Y ) ∧ parent(Y , Z )
sibling(X , Y ) ← parent(X , Z ) ∧ parent(Y , Z ) ∧ X 6= Y
ancestor (X , Y ) ← parent(X , Y )
ancestor (X , Y ) ← parent(X , Z ) ∧ ancestor (Z , Y )
Die vierte Regel ist rekursiv, da das Kopfprädikat ancestor /2 ebenfalls im
Regelrumpf aufgerufen wird.
Darauf aufbauend kann man Anfragen stellen. Die Auswertung der Anfrage
← grandparent(’William’, Z )
liefert für Z die Belegungen Z 7→ ’Elizabeth’ und Z 7→ ’Philip’.
Prof. Dr. Dietmar Seipel
77
Deduktive Datenbanken
Sommersemester 2012
A NCESTOR
Auszug der IDB
G RANDPARENT
NAME
A NCESTOR
Anne
Elizabeth
Anne
Philip
Andrew
Elizabeth
Andrew
Philip
Charles
Elizabeth
Charles
Philip
Edward
Elizabeth
Edward
Philip
Harry
Charles
NAME
G RANDPARENT
Harry
Elizabeth
Harry
Philip
Harry
Diana
William
Elizabeth
Harry
Elizabeth
Harry
Philip
William
Charles
William
Diana
William
Elizabeth
William
Philip
William
Prof. Dr. Dietmar Seipel
Philip
78
Deduktive Datenbanken
Sommersemester 2012
Weitere Regeln:
aunt
aunt(X , Y ) ← parent(X , Z ) ∧ sibling(Z , Y ) ∧
person(Y , _, female)
uncle(X , Y ) ← parent(X , Z ) ∧ sibling(Z , Y ) ∧
person(Y , _, male)
cousin(X , Y ) ← parent(X , U ) ∧ parent(Y , V ) ∧
sibling(U , V ) ∧ X 6= Y
cousin(X , Y ) ← parent(X , U ) ∧ parent(Y , V ) ∧
cousin(U , V ) ∧ X 6= Y
ancestor : Vorfahre
sibling: Geschwister (Bruder, Schwester)
uncle
?
?
+ U
parent
sibling
K
I
sU
person
6
R
cousin
Veranschaulichung: Rule/Goal–Graph
Prof. Dr. Dietmar Seipel
79
Deduktive Datenbanken
Sommersemester 2012
Beispiel (Transitive Vorgesetzte)
Auch die bekannte C OMPANY–Datenbank kann als extensionale Datenbank in
DATALOGfun repräsentiert werden:
employee(’Smith’, ’4444’, 1955–01–09, ’M’, 30000, ’2222’, 5)
employee(’Wong’, ’2222’, 1945–12–08, ’M’, 40000, ’1111’, 5)
employee(’Zelaya’, ’7777’, 1958–07–19, ’F’, 25000, ’3333’, 4)
employee(’Wallace’, ’3333’, 1931–06–20, ’F’, 43000, ’1111’, 4)
employee(’Narayan’, ’5555’, 1952–09–15, ’M’, 38000, ’2222’, 5)
employee(’English’, ’6666’, 1962–07–31, ’F’, 25000, ’2222’, 5)
employee(’Jabbar’, ’8888’, 1959–03–29, ’M’, 25000, ’3333’, 4)
employee(’Borg’, ’1111’, 1927–11–10, ’M’, 55000, ’$null$’, 1)
Es sollen nun Paare von Personennamen abgeleitet werden, so daß die erste
Person ein indirekter Vorgesetzter (superior) der zweiten Person ist.
Prof. Dr. Dietmar Seipel
80
Deduktive Datenbanken
Sommersemester 2012
Datentypen:
2 Die Namen, die Sozialversicherungsnummern und die Geschlechterangaben
zu den Personen sind Zeichenketten.
2 Der Lohn ist eine Zahl, damit man damit rechnen kann.
2 Die Abteilungsnummer kann man als Zahl oder als Zeichenkette
repräsentieren.
2 Ein Geburtsdatum wird als Term Year–Month–Day in Infix–Notation
repräsentiert. Dies entspricht dem S QL–Datumstyp und dient auch der
Lesbarkeit. Die drei Komponenten des verschachtelten Terms sind Zahlen.
Die Präfix–Notation zum Datum 1955–01–09 wäre z.B. – (– (1955, 01), 09).
Die führenden Nullen in den Zahlen sind bedeutungslos, sie verbessern aber
ebenfalls die Lesbarkeit.
Prof. Dr. Dietmar Seipel
81
Deduktive Datenbanken
Sommersemester 2012
Regeln zur Ableitung der intensionalen Datenbank:
superior _by_name(Name1 , Name2 ) ←
superior (SSN1 , SSN2 ) ∧
employee(Name1 , SSN1 , _, _, _, _, _) ∧
employee(Name2 , SSN2 , _, _, _, _, _)
superior (SSN1 , SSN2 ) ←
direct_supervisor (SSN1 , SSN2 )
superior (SSN1 , SSN2 ) ←
direct_supervisor (SSN1 , SSN3 ) ∧
superior (SSN3 , SSN2 )
/* Rekursion */
direct_supervisor (SSN1 , SSN2 ) ←
employee(_, SSN2 , _, _, _, SSN1 , _).
Zur besseren Lesbarkeit erlauben wir hier DATALOG–Variablen Xn mit Indizes,
die man streng genommen als X_n schreiben müßte.
Prof. Dr. Dietmar Seipel
82
Deduktive Datenbanken
Sommersemester 2012
Bottom–Up–Auswertung von DATALOG
2 Die Menge aller Fakten zu einem Prädikat entspricht einer Relation.
2 Die Menge aller Regeln mit demselben Prädikatensymbol im Kopf entspricht
einem V IEW–Statement, das eine Relation zum eben diesem
Prädikatensymbol erzeugt.
2 Die Relationen zu den Prädikatensymbolen aus dem Regelrumpf werden
selbst wieder mithilfe von Regeln berechnet.
So kann es passieren, daß eine Regel dabei hilft, transitiv Tupel für eines
ihrer eigenen Rumpfprädikatensymbole abzuleiten (Rekursion).
Z.B. ist die zweite Regel für superior direkt rekursiv.
2 Die Bottom–Up–Auswertung vergrößert iterativ die Relationen zu den
Prädikatensymbolen durch wiederholte Auswertung aller Regeln bis
schließlich ein Fixpunkt erreicht wird.
Auf diese Weise können alle transitiven Vorgesetzten abgeleitet werden,
was mit Standard–S QL beweisbar nicht möglich ist.
Prof. Dr. Dietmar Seipel
83
Deduktive Datenbanken
Sommersemester 2012
Beispiel (Transitive Vorgesetzte)
1111
j
2222
4444
?
5555
3333
j
6666
7777
R
8888
In der ersten Iteration werden Fakten für direct_supervisor aus den Fakten für
employee abgeleitet:
direct_supervisor(’1111’, ’2222’).
direct_supervisor(’1111’, ’3333’).
direct_supervisor(’2222’, ’4444’).
direct_supervisor(’2222’, ’5555’).
direct_supervisor(’2222’, ’6666’).
direct_supervisor(’3333’, ’7777’).
direct_supervisor(’3333’, ’8888’).
Prof. Dr. Dietmar Seipel
84
Deduktive Datenbanken
Sommersemester 2012
Die zweite Iteration überführt diese Fakten in die entsprechenden 7 Fakten für
superior.
superior(’1111’, ’2222’).
...
superior(’3333’, ’8888’).
Die dritte Iteration leitet 5 neue Fakten ab, die besagen daß der Angestellte ’1111’
der transitive (indirekte) Vorgesetzte der Angestellten ’4444’ bis ’8888’ ist:
superior(’1111’, ’4444’).
...
superior(’1111’, ’8888’).
Wenn man die Tiefe der Hierarchie beschränkt (hier Tiefe 2), dann könnten die
Relationen zu diesen Fakten auch in S QL abgeleitet werden.
Ohne Beschränkung der Tiefe ist es jedoch nicht möglich die transitiven
Vorgesetzten in S QL abzuleiten; hier wäre bereits Embedded S QL erforderlich.
Prof. Dr. Dietmar Seipel
85
Deduktive Datenbanken
Sommersemester 2012
Prizipiell können alle Regeln in allen Iterationen benutzt werden. Aber eine
Regel kann nur feuern und Fakten ableiten, nachdem passende Fakten für die
Rumpfatome in früheren Iterationen abgeleitet wurden. Von da an kann eine
Regel immer benutzt werden, um dieselben Fakten abzuleiten.
Eines der Ziele der effizienten Bottom–Up–Auswertung in deduktiven
Datenbanken ist die Vermeidung dieser redundanten Ableitungen – insbesondere
für rekursive Regelsysteme.
Die Regel für superior _by_name feuert in Iteration 3 zum ersten Mal und leitet
7 Fakten für direkte Vorgesetzte ab:
superior _by_name(’Borg’, ’Wong’).
...
superior _by_name(’Wallace’, ’Jabbar ’).
Zum Abschluß werden in Iteration 4 die 5 Fakten für die transitiven Vorgesetzten
abgeleitet. Iteration 5 leitet keine weiteren, neuen Fakten mehr ab. Also ist ein
Fixpunkt erreicht, und die Iteration terminiert.
Prof. Dr. Dietmar Seipel
86
Deduktive Datenbanken
Sommersemester 2012
Vergleich mit S QL
2 Nicht–rekursives DATALOG kann in S QL simuliert werden, indem man die
Regeln auf V IEW–Statements abbildet.
2 Rekursion bringt höhere Ausdrucksmächtigkeit für DATALOG.
2 Es gibt DATALOG–Erweiterungen, die (Default–) Negation und
Aggregatsfunktionen erlauben.
2 Der regelbasierte Ansatz von DATALOG unterstützt Modularisierung:
anstelle komplexer S ELECT– und V IEW–Statements in S QL können
einfachere und kompaktere DATALOG–Regeln benutzt werden.
Das deduktive Datenbanksystem DD BASE (vgl. Kapitel 2) unterstützt auch
Update–Operationen wie I NSERT und D ELETE, und es kann sich mit relationalen
Datenbanken verbinden.
Prof. Dr. Dietmar Seipel
87
Deduktive Datenbanken
Sommersemester 2012
1.2.2 Integritätsbedingungen und Default Negation
Transaktionen
2 Atomarität: Eine Transaktion ist eine atomare Einheit, welche verschiedene
Operationen zum Einfügen, Löschen und Update von Tupeln enthält.
2 Konsistenz: Vor und nach der Ausführung der Transaktion müssen alle
Integritätsbedingungen erfüllt sein.
2 Isolation: Verschiedene Transaktionen müssen voneinander isoliert
ausgeführt werden.
2 Dauerhaftigkeit: Die Effekte einer erfolgreichen Transaktion überleben jeden
danach auftretenden Hardware– oder Softwarefehler.
Wir interessieren uns im folgenden nur für die Integritätsbedingungen.
Prof. Dr. Dietmar Seipel
88
Deduktive Datenbanken
Sommersemester 2012
Beispiel (Integritätsbedingungen in DATALOGfun,not )
Schlüsselbedingung:
r1 = incorrect_db(one_mother (X , M1 , M2 )) ←
mother (X , M1 ) ∧ mother (X , M2 ) ∧ M1 6= M2
Fremdschlüsselbedingungen:
r2 = incorrect_db(person_parent(X )) ←
parent(X , _) ∧ not person(X )
r3 = incorrect_db(person_child (Y )) ←
parent(_, Y ) ∧ not person(Y )
r4 = person(X ) ← person(X , _, _)
Anomalien:
r5 = incorrect_db(self _parent(X )) ← parent(X , X )
r6 = incorrect_db(cyclic_ancestor (X )) ← ancestor (X , X )
Prof. Dr. Dietmar Seipel
89
Deduktive Datenbanken
Sommersemester 2012
Obige Regeln verwenden eine DATALOG–Erweiterung um Negation “not ” und
Funktionssymbole (z.B. “one_mother”).
Die Auswertung von DATALOGnot – bzw. DATALOGfun,not –Regeln ist etwas
komplizierter als bei DATALOG.
Obiges Programm ist aber stratifiziert:
2 Das Prädikat incorrect_db/1 hängt zwar von person/1 über Negation “not ”
ab, umgekehrt hängt person/1 aber nicht von incorrect_db/1 ab.
2 Deswegen kann man zuerst person/1 basierend auf dem EDB–Prädikat
person/3 auswerten. Danach kann man incorrect_db/1 auswerten.
Zur Auswertung von nicht–stratifizierten DATALOGnot – bzw.
DATALOGfun,not –Regeln braucht man kompliziertere Konzepte.
Prof. Dr. Dietmar Seipel
90
Deduktive Datenbanken
Sommersemester 2012
incorrect_db/1
R
r1
r2 , r3
not
6= /2
U
mother /2
parent/2
U
person/1
?
r4
?
person/3
Prof. Dr. Dietmar Seipel
91
Deduktive Datenbanken
Sommersemester 2012
Korrektheit der Datenbank:
r7 = correct_db(one_mother ) ←
not incorrect_db(one_mother )
r8 = incorrect_db(one_mother ) ←
mother (X , M1 ) ∧ mother (X , M2 ) ∧ M1 6= M2
Die obige Regel r1 für incorrect_db(one_mother (X , M1 , M2 )) kann hier nicht
direkt für r7 verwendet werden, denn
r9 = correct_db(one_mother ) ←
not incorrect_db(one_mother (X , M1 , M2 ))
würde die Datenbank immer als korrekt ansehen, da man Tupel findet, für die
incorrect_db(one_mother (X , M1 , M2 )) nicht gilt (z.B. für M1 = M2 ).
r9 ist in DATALOGfun,not auch gar nicht erlaubt, da die Variablen des negativen
Rumpfs nicht im positiven Rumpf vorkommen.
Prof. Dr. Dietmar Seipel
92
Deduktive Datenbanken
Sommersemester 2012
Ebenso kann man die Regel r4 , die in ihrer ausführlichen Schreibweise eigentlich
eine Regel
r4′ = person(X ) ← person(X , Y , S )
mit drei paarweise verschiedenen Variablen ist, nicht in r2 bzw. r3 einsetzen:
r2′ = incorrect_db(person_parent(X )) ←
parent(X , _) ∧ not person(X , _, S )
r3′ = incorrect_db(person_child (Y )) ←
parent(_, Y ) ∧ not person(Y , _, S )
Die erhaltenen Regeln hätten ebenfalls eine andere Bedeutung:
Falls es mindestens ein Fakt parent(X , Y ) gibt, so würden sie die Datenbank
immer als inkorrekt ansehen, da man Tupel findet, für die person(X , Y , S ) nicht
gilt (z.B. für S 6= female und S 6= male).
Außerdem wären r2′ und r3′ in DATALOGfun,not ebenfalls nicht erlaubt, da je zwei
Variablen (_ und S) des negativen Rumpfs nicht im positiven Rumpf vorkommen.
Prof. Dr. Dietmar Seipel
93
Deduktive Datenbanken
Sommersemester 2012
Gegenüberstellung entsprechender Konzepte
Prof. Dr. Dietmar Seipel
Datenbanken
DATALOG
Relation
Prädikat
Attribut
Argument
Tupel
Fakt
Anfrage
Ziel (Goal)
Sicht
Regeln
Integritätsbedingung
Regeln
94
Deduktive Datenbanken
Sommersemester 2012
Literatur
2 S. Ceri, G. Gottlob, L. Tanca:
Logic Programming and Databases, Springer, 1990.
2 S.K. Das:
Deductive Databases and Logic Programming, Addison–Wesley, 1992.
2 J.W. Lloyd:
Foundations of Logic Programming, Springer, Second Edition, 1987.
2 A. Cremers, U. Griefahn, R. Hinze:
Deduktive Datenbanken, Vieweg, 1994.
Prof. Dr. Dietmar Seipel
95
Deduktive Datenbanken
Sommersemester 2012
Erweiterungen von DATALOG
2 B UILT–I N–Prädikate: “<”, “≤”, “>”, “≥”, “=”, “6=”, “is”
2 Funktionssymbole: → DATALOGfun
Komplexe Objekte, z.B. für X ML, CAD, Geo–Datenbanken
2 Aggregationsfunktionen: sum, count, max, min, avg → DATALOGagg
2 Default Negation: → DATALOGnot
Closed–World–Annahme, Stratifizierung, perfekte/stabile Modelle
2 DATALOG∗ : beliebige P ROLOG–Regeln mit stratifizierten Meta–Prädikaten
(z.B. für Aggregation und Negation), Bottom–Up–Auswertung
2 Unvollständiges und unsicheres Wissen, Disjunktion: → D IS L OG
2 Updates, Typenkonzepte, Nullwerte, . . .
Prof. Dr. Dietmar Seipel
96
Deduktive Datenbanken
1.2.3
Sommersemester 2012
B UILT–I N–Prädikate
B UILT–I N–Prädikate sind EDB–Prädikate, die – meist in Infix–Notation
geschrieben – nicht explizit in der EDB gespeichert, sondern durch eine
Auswertungsvorschrift gegeben sind.
Beispiele:
“<”, “≤”, “>”, “≥”, “=”, “6=”, “is”
Regel mit Built–In–Prädikat:
sibling(X , Y ) ← parent(X , Z ) ∧ parent(Y , Z ) ∧ X 6= Y
Die zugehörigen EDB–Relationen sind meist unendlich, was Probleme bei der
Auswertung der sie enthaltenden DATALOG–Programme aufwerfen kann
(unendlich viele abgeleitete Fakten).
Prof. Dr. Dietmar Seipel
97
Deduktive Datenbanken
Sommersemester 2012
Beispiele:
is
6=
=
Prof. Dr. Dietmar Seipel
a
a
b
b
c
..
.
c
..
.
X
Y
Z is X + Y
a
b
0
1
1
b
a
0
2
2
a
c
c
a
0
..
.
3
..
.
3
..
.
b
c
1
1
2
c
..
.
b
..
.
1
2
3
1
..
.
3
..
.
4
..
.
98
Deduktive Datenbanken
Sommersemester 2012
Deswegen müssen DATALOG–Programme mit B UILT–I N–Prädikaten folgende
Bedingung erfüllen:
Sicherheitsbedingung
jede Variable, die in einem Input–Argument eines B UILT–I N–Prädikates
in einem Regelrumpf auftritt, muß
2 gleichzeitig auch in einem gewöhnlichen Prädikat desselben
Regelrumpfes auftreten, oder sie muß
2 durch eine Folge von Gleichheits–Prädikaten ausgehend von
gewöhnlichen Prädikaten gebunden sein.
In der constraint–logischen Programmierung (CLP) ist diese Bedingung nicht
erforderlich. Dann werden bei Aufrufen mit arithmetischen Vergleichsprädikaten
alle möglichen Bindungen – innerhalb einer vorgegebenen Domäne – für die
beteiligten Variablen generiert.
Prof. Dr. Dietmar Seipel
99
Deduktive Datenbanken
Sommersemester 2012
Beispiel (Sichere und unsichere DATALOG–Regeln)
2 unsichere Regel:
ordinary_citizen(X ) ←
president(Y ) ∧ X 6= Y
Bei der Auswertung kann man beliebige Werte für X einsetzen.
2 sichere Regeln:
ordinary_citizen(X ) ←
citizen(X ) ∧ president(Y ) ∧ X 6= Y,
ordinary_citizen(X ) ←
citizen(X ) ∧ president(Y ) ∧ X = U ∧ Y = V ∧ U 6= V
Bei der Auswertung werden die Werte für X durch das Domänen–Prädikat
citizen gebunden.
Prof. Dr. Dietmar Seipel
100
Deduktive Datenbanken
Sommersemester 2012
Auswertung eines B UILT–I N–Prädikats
2 “<”, “≤”, “>”, “≥”, “6=” erfolgt erst, sobald alle seine Argumente gebunden
sind,
2 “=” erfolgt erst, sobald ein Argument gebunden ist,
2 “is” erfolgt erst, sobald alle seine Input–Argumente gebunden sind.
Der Vergleich X = Z in der ersten der folgenden Regeln stellt kein Problem dar.
In der zweiten Regel hat Z is U +V die Input–Variablen “U” und “V”.
r (X , Y ) ← p(a, X) ∧ X = Z ∧ q(Z, Y ),
r (X , Y , Z ) ← p(X, U ) ∧ q(Y, V ) ∧ Z is U +V
Prof. Dr. Dietmar Seipel
101
Deduktive Datenbanken
Sommersemester 2012
Bei der Übersetzung von DATALOG–Regeln in S QL oder die Relationenalgebra
werden B UILT–I N–Prädikate durch Join–Bedingungen ausgedrückt.
Relationenalgebra und S QL
Für die DATALOG–Regel
sibling(X , Y ) ← parent(X , Z ) ∧ parent(Y , Z ) ∧ X 6= Y
erhalten wir in der Relationenalgebra
S IBLING = ΠP1.NAME,P2.NAME (P1 1C P2),
mit P1 = P2 = PARENT und C = (P1.PARENT = P2.PARENT ) A ND (P1.NAME
6= P2.NAME ), und in S QL
C REATE V IEW S IBLING A S
S ELECT P1.NAME , P2.NAME
F ROM PARENT P1, PARENT P2
W HERE C.
Prof. Dr. Dietmar Seipel
102
Deduktive Datenbanken
Sommersemester 2012
1.2.4 Aggregationsfunktionen
Datenbankschema für komplexe Objekte:
2 components(Product, Component, Qty):
Ein komplexes Teil Product enthält Qty Teile Component.
2 price(Product, Price):
Ein elementares Teil Product kostet Price Geldeinheiten.
Für ein Teil sind entweder die Komponenten (komplexes Teil) oder der Preis
(elementares Teil) angegeben – aber nicht beides.
Die Kosten eines Teils berechnen sich rekursiv aus den Kosten seiner Unterteile:
2 costs(Product, Costs).
Wenn das Teil Component die Kosten C hat, dann trägt es mit C * Qty
Geldeinheiten zum Preis von Product bei.
Prof. Dr. Dietmar Seipel
103
Deduktive Datenbanken
Sommersemester 2012
Graphische Form
engine
4
9
sparkplug
4
cylinder
1
piston
2
gasket
R
hanger
4
4
screw
3
screw
4
?
20
2
?
bolt
joint
10
screw
gasket
8
R
screw
crankshaft
connecting rod
z
j
1
R
2
1
valve
1
Prof. Dr. Dietmar Seipel
4
?
bolt
?
bolt
104
Deduktive Datenbanken
Sommersemester 2012
Relationale Form
C OMPONENTS
Prof. Dr. Dietmar Seipel
engine
sparkplug
4
engine
cylinder
4
engine
valve
4
engine
crankshaft
1
cylinder
piston
1
cylinder
connecting rod
1
valve
gasket
1
valve
hanger
2
crankshaft
joint
8
piston
screw
2
piston
gasket
3
connecting rod
screw
4
connecting rod
bolt
4
hanger
screw
4
hanger
bolt
2
joint
screw
10
joint
bolt
20
P RICE
sparkplug
10
screw
2
gasket
3
bolt
2
105
Deduktive Datenbanken
Sommersemester 2012
Stücklisten–Auflösung
Die folgenden DATALOGagg –Regeln berechnen rekursiv die Kosten eines Teils
als die Summe der Kosten seiner Unterteile:
costs(Product, hCost isum ) ←
components(Product, Component, Qty) ∧
costs(Component, C ) ∧ Cost is C ∗ Qty.
costs(Product, Price) ←
price(Product, Price).
Da die zum Prädikat component gehörige Teilehierarchie azyklisch ist, kann
man die Kosten der Komponenten vor den Kosten eines Teils berechnen.
Im Allgemeinen erfordert die Auswertung rekursiver Regeln mit Aggregation
allerdings kompliziertere Mechanismen.
Prof. Dr. Dietmar Seipel
106
Deduktive Datenbanken
Sommersemester 2012
In DATALOG∗ könnte die Berechnung wie folgt aussehen:
costs(Product, Sum) :ddbase_aggregation( [Product, sum(Cost)],
( transitive_closure( components,
Product:1, P2:Q2 ),
price(P2, Price),
Cost is Price * Q2 ),
[Product, Sum] ).
components(P1:Q1, P2:Q2) :components(P1, P2, Q),
Q2 is Q1 * Q.
Anstelle mit der rekursiven Aggregation aus DATALOGagg , die hier nicht erlaubt
ist, wird der Preis über die transtive Hülle der Teilehierarchie ermittelt.
Prof. Dr. Dietmar Seipel
107
Deduktive Datenbanken
Sommersemester 2012
Hierbei wird der folgende virtuelle Graph verwendet:
engine:1
9
sparkplug:4
cylinder:4
piston:4
R
connecting rod:4
gasket:12
crankshaft:1
R
gasket:4
R
hanger:8
screw:16
?
Prof. Dr. Dietmar Seipel
valve:4
screw:8
z
j
screw:32
?
bolt:16
joint:8
screw:80
?
bolt:16
?
bolt:160
108
Deduktive Datenbanken
Sommersemester 2012
In P ROLOG könnte man die Berechnung dagegen direkt umsetzen:
costs(Product, Sum) :ddbase_aggregation( [Product, sum(Cost)],
( components(Product, Component, Qty),
costs(Component, C), Cost is C * Qty ),
[Product, Sum] ).
costs(Product, Price) :price(Product, Price).
Hier ist die rekursive Aggregation aus DATALOGagg erlaubt.
2 Für komplexe Teile werden die Kosten der Unterteile aggregiert (Regel 1).
2 Für elementare Teile ist ein Preis angegeben (Regel 2).
Das Prädikat ddbase_aggregation/3 basiert auf
ddbase_aggregate/3; beide finden sich im D DK.
Prof. Dr. Dietmar Seipel
109
Herunterladen