bases de dados dedutivas bases de dados dedutivas usam a tecnologia de linguagens de programaçao...

13
Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com suporte para vistas recursivas e dados nao atómicos. Base de dados formada por factos + regras . Factos: edge(a,b). edge(a,c). edge(b,c). edge(b,d). Regras: twoedges(X,Y) :- edge(X,Z), edge(Z,Y).

Upload: andre-pinta

Post on 07-Apr-2016

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Bases de Dados Dedutivas

• Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com suporte para vistas recursivas e dados nao atómicos.

• Base de dados formada por factos + regras.

Factos:edge(a,b).

edge(a,c).edge(b,c).edge(b,d).

Regras: twoedges(X,Y) :- edge(X,Z), edge(Z,Y).

Page 2: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Regras não são “views”.

path(X,Y) :- edge(X,Y).path(X,Y) :- edge(X,Z), path(Z,Y).

• Regras recursivas não podem ser expressas em SQL!

Page 3: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Consultas

?- edge(a,Y).Y = b;Y = c.

Page 4: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Consultas

?- edge(a,Y).Y = b;Y = c.

Em SQL:select sink from edge

where source = ‘a’;

Page 5: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Consultas envolvendo recursão

?- path(a,Y).Y = b;Y = c;Y= d.

Não pode ser expressa directamente em SQL.

Page 6: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Mais exemplos

Factos:supervise(franklin,john).supervise(franklin,ramesh).supervise(franklin,joyce).supervise(jennifer,alicia).supervise(jennifer,ahmad).supervise(james,franklin).supervise(james,jennifer).

Regras:superior(X,Y) :- supervise(X,Y).superior(X,Y) :- supervise(X,Y), superior(Z,Y).subordinate(X,Y) :- superior(Y,X).

Page 7: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Mecanismos de inferencia para programas lógicos

• Bottom-up (forward chaining)

• Top-down (backward chaining)

?- superior(james,Y).

Page 8: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Datalog

employee(john). male(john).employee(franklin). male(franklin).employee(alicia).employee(jennifer). female(alicia).

female(jennifer).salary(john,30000).salary(franklin,40000). project(productx).salary(alicia,25000). project(producty).salary(jennifer,43000). project(computerization).

department(john,research). workson(john,productx,32).department(franklin,research). workson(john,producty,8).department(alicia,administration). workson(franklin,producty,10).department(john,administration). workson(alicia,computerization,10).

workson(jennifer,computerization,15).supervise(franklin,john).supervise(jennifer,alicia).

Page 9: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Datalog

superior(X,Y) :- supervise(X,Y).superior(X,Y) :- supervise(X,Y), superior(Z,Y).

subordinate(X,Y) :- superior(Y,X).

supervisor(X) :- employee(X), supervise(X,Y).

over_40k_emp(X) :- employee(X), salary(X,Y), Y>=40000.

under_40k_supervisor(X) :- supervisor(X), not(over_40k_emp(X)).

main_productx_emp(X) :- employee(X), workson(X,productx,Y), Y>=20.

president(X) :- employee(X), not(supervise(Y,X)).

Page 10: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Programas seguros

• Um programa ou uma regra sao ditos seguros se geram um número finito de factos.

Exemplos:

big_salary(Y) :- Y>60000. %insegura

big_salary(Y) :- employee(X), salary(X,Y), Y>60000. %segura

Page 11: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Operadores da Álgebra Relacional

rel_one(A,B,C).rel_two(D,E,F).rel_three(G,H,I,J).

c(one) 5(one) c AND B < 5(one) c OR B < 5 (one)

G,H(three) one + two onetwo two - one

one three one C=G three

Page 12: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Execuçao de consultas nao recursivas

Para consultas que envolvam apenas predicados definidos por factos, como:

?- department(X,research).

existe uma conversao directa para uma expressao da álgebra relacional:

$1($2“Research”(department))

Para consultas que envolvam predicados definidos por regras é necessário um algoritmo para determinar a expressao da álgebra relacional a ser executada pelo SGBD (seguindo um grafo de dependencias).

Page 13: Bases de Dados Dedutivas Bases de dados dedutivas usam a tecnologia de linguagens de programaçao lógica para aumentar as bases de dados relacionais com

Algoritmo para consultas nao recursivas

?- p(arg1,...,argn).1. Obter todas as regras S cuja cabeça envolva o predicado p. Se nao existem tais

regras p é um predicado definido apenas por factos, correspondendo a alguma relaçao na BD Rp. Neste caso uma das seguintes expressoes é retornada e o algoritmo termina:1. Se todos os argumentos sao variáveis distintas retornar Rp.2. Se alguns argumentos sao constantes ou se a mesma variável aparece em mais do que um

argumento, a expressao retornada é:SELECT <condition>(Rp),onde a condiçao de selecçao é a conjunçao de condiçoes simples ligadas por AND, e construída como segue:i. Se a constante c aparece no argumento i, incluir a condiçao ($i=c).ii. Se a mesma variável aparece nos argumentos j e k, incluir a condiçao ($j=$k).

2. Neste ponto existem regras, Si, com o predicado p na cabeça. Para cada regra gerar uma expressao relacional como segue:a) Aplicar o passo 1 nos predicados no corpo da regra.b) Criar uma junçao natural entre as relaçoes que correspondam aos predicados no corpo da

regra, nas variáveis comuns. Seja o resultado desta junçao Rsc) Se existe algum predicado built-in X Y sobre os argumentos X e Y, o resultado da junçao é

sujeito a mais uma selecçao:SELECT xy (Rs).

3. Tomar a REUNIAO das expressoes geradas em 2.