Bases de Dados Dedutivas

Propaganda
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).
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!
Consultas
?- edge(a,Y).
Y = b;
Y = c.
Consultas
?- edge(a,Y).
Y = b;
Y = c.
Em SQL:
select sink from edge
where source = ‘a’;
Consultas envolvendo recursão
?- path(a,Y).
Y = b;
Y = c;
Y= d.
Não pode ser expressa directamente em SQL.
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).
Mecanismos de inferencia para programas
lógicos
• Bottom-up (forward chaining)
• Top-down (backward chaining)
?- superior(james,Y).
Datalog
employee(john).
employee(franklin).
employee(alicia).
employee(jennifer).
salary(john,30000).
salary(franklin,40000).
salary(alicia,25000).
salary(jennifer,43000).
department(john,research).
department(franklin,research).
department(alicia,administration).
department(john,administration).
supervise(franklin,john).
supervise(jennifer,alicia).
male(john).
male(franklin).
female(alicia).
female(jennifer).
project(productx).
project(producty).
project(computerization).
workson(john,productx,32).
workson(john,producty,8).
workson(franklin,producty,10).
workson(alicia,computerization,10).
workson(jennifer,computerization,15).
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)).
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
Operadores da Álgebra Relacional
rel_one(A,B,C).
rel_two(D,E,F).
rel_three(G,H,I,J).
sA= c(one)
pG,H(three)
sB< 5(one)
sA= c AND B < 5(one)
one + two
one  three one *C=G three
one  two
sA= c OR B < 5 (one)
two - one
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:
p$1(s$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).
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.
2.
2.
Neste ponto existem regras, Si, com o predicado p na cabeça. Para cada regra
gerar uma expressao relacional como segue:
a)
b)
c)
3.
Se todos os argumentos sao variáveis distintas retornar Rp.
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).
Aplicar o passo 1 nos predicados no corpo da regra.
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 Rs
Se existe algum predicado built-in X q Y sobre os argumentos X e Y, o resultado da junçao
é sujeito a mais uma selecçao:
SELECT xq y (Rs).
Tomar a REUNIAO das expressoes geradas em 2.
Download