discussion #24 1/17 discussion #24 deductive databases

17
Discussion #24 1/17 Discussion #24 Deductive Databases

Post on 22-Dec-2015

221 views

Category:

Documents


2 download

TRANSCRIPT

Discussion #24 1/17

Discussion #24

Deductive Databases

Discussion #24 2/17

Topics

• Deductive Databases

• Turning Datalog into Relational Algebra

• Recursive Rules & the Least Fixed Point Algorithm

Discussion #24 3/17

Deductive Databases

• Deductive database management systems answer queries based on methods related to proofs from rules and facts.

• Relational algebra operations can be used to more efficiently process deductive database queries.

Discussion #24 4/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(x,z),f(z,y).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1

1 2 2 3

b b xCyDxy(AyBx f ) b b xCyDxy(AxBzf || AzByf)xDxC=1b

Discussion #24 5/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(x,z),f(z,y).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2

b b xCyDxy(AyBx f ) b b xCyDxy(AxBzf || AzByf)xDxC=1b

Discussion #24 6/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(x,z),f(z,y).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2 1 2 1 3

b b xCyDxy(AyBx f ) b b xCyDxy(AxBzf || AzByf)xDxC=1b

Discussion #24 7/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(x,z),f(z,y).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2 1 2 1 3

b b xCyDxy(AyBx f ) b b xCyDxy(AxBzf || AzByf)xDxC=1b

x123

or x = 1 x = 2 x = 3

Discussion #24 8/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(y,y),f(2,x).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2

b b xCyDxy(AyBx f ) b b xCyDxy(AyAA=Bf

|| BxBA=2f)xDxC=1b

Discussion #24 9/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(y,y),f(2,x).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2 3 1

b b xCyDxy(AyBx f ) b b xCyDxy(AyAA=Bf

|| BxBA=2f)xDxC=1b

Discussion #24 10/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(y,y),f(2,x).Queries:

b(1,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2 3 1

b b xCyDxy(AyBx f ) b b xCyDxy(AyAA=Bf

|| BxBA=2f)xDxC=1b

x 1

or x = 1

Discussion #24 11/17

Correspondence Between Relational Databases & Deductive Databases

Schemes:f(A,B)b(C,D)

Facts:f(1,1). f(1,2).f(2,3).

Rules:b(x,y) :- f(y,x).b(x,y) :-

f(y,y),f(2,x).Queries:

b(x,x)?

f(A, B) b(C, D) 1 1 1 1

1 2 2 1 2 3 3 2 3 1

b b xCyDxy(AyBx f ) b b xCyDxy(AyAA=Bf

|| BxBA=2f)xCxCC=Db

x 1

or x = 1

Discussion #24 12/17

Rule Order & Recursive Rules

• Rules may appear in any order.

• Rules may be recursive.

• To handle this, we repeatedly execute rules in any order and quit when we deduce no new facts (least fixed point algorithm).

Discussion #24 13/17

Least Fixed Point AlgorithmSchemes:

f(A,B)b(C,D)

Facts:f(1,1).f(1,2).f(2,3).

Rules:b(x,y) :- f(x,y).b(x,y) :-

f(x,z),b(z,y).Queries:

b(1,3)?

• Least Fixed Point Algorithm– Start with an empty set S– Add to S repeatedly until

no more changes.• Essentially:

b { }repeat:

b b fb b (f || b)

until no changeresult “yes” if not empty: C=1D=3b

Discussion #24 14/17

Set UpSchemes:

f(A,B)b(C,D)

Facts:f(1,1).f(1,2).f(2,3).

Rules:b(x,y) :- f(x,y).b(x,y) :-

f(x,z),b(z,y).Queries:

b(1,3)?

• Before unioning, sets must be union compatible.

• Before joining, attributes must observe variable sameness and differences.

b { }repeat:

b b ACBDf

b b CDAC(f || CBb)

until no changeresult “yes” if not empty: C=1D=3b

Note: these renamings

are “human determined.”

Use renamings as described

earlier for programming.

Discussion #24 15/17

1st Iteration Schemes:f(A,B)b(C,D)

Facts:f(1,1).f(1,2).f(2,3).

Rules:b(x,y) :- f(x,y).b(x,y) :-

f(x,z),b(z,y).Queries:

b(1,3)?

b { }repeat:

b b ACBDfb b CDAC(f || CBb)

until no changeresult “yes” if not empty: C=1D=3b

b(C,D) b(C,D) f(A,B)f(C,D) 1 1 1 2 2 3

1 1 1 2 2 3

ACBDfb(C,D)

b(C,D) b(C,D) f(A,B) || b(C,D)f(A,B) || b(B,D) = t(A,B,D) 1 1 1 1 1 1 1 1 2 1 2 1 1 2 2 3 2 3 1 2 3

1 1 1 2 2 3

CBb

t(C,B,D) 1 1 1 1 1 2 1 2 3

CDACt

1 1 1 2 2 3 1 3

b changed! So, repeat.

Discussion #24 16/17

2nd Iteration Schemes:f(A,B)b(C,D)

Facts:f(1,1).f(1,2).f(2,3).

Rules:b(x,y) :- f(x,y).b(x,y) :-

f(x,z),b(z,y).Queries:

b(1,3)?

b { }repeat:

b b ACBDfb b CDAC(f || CBb)

until no changeresult “yes” if not empty: C=1D=3b

b(C,D) b(C,D) f(A,B)

b(C,D) b(C,D) f(A,B) || b(C,D)f(A,B) || b(B,D) = t(A,B,D) 1 1 1 1 1 1 1 1 2 1 2 1 1 2 2 3 2 3 1 1 3 1 3 1 2 3

CBb

t(C,B,D) 1 1 1 1 1 2 1 1 3 1 2 3

CDACt

1 1 1 2 2 3 1 3

f hasn’t changed so no change here

1 1 1 2 2 3 1 3

b did NOT change, so done.

duplicate

Discussion #24 17/17

Query Finalization Schemes:f(A,B)b(C,D)

Facts:f(1,1).f(1,2).f(2,3).

Rules:b(x,y) :- f(x,y).b(x,y) :-

f(x,z),b(z,y).Queries:

b(1,3)?

b { }repeat:

b b ACBDfb b CDAC(f || CBb)

until no changeresult “yes” if not empty: C=1D=3b

b(1,3)?

So, finally…

C=1D=3b(C,D)? = C,D = not empty = Yes 1 1 1 3 1 2 2 3 1 3

b(2,2)? Nob(1,X)? Yes X = 1 X = 2 X = 3

b(2,X)? Yes X = 3