bases de dados dedutivas bases de dados dedutivas usam a tecnologia de linguagens de programaçao...
TRANSCRIPT
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). 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).
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).
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
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).
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.