130 likes | 244 Views
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. Regras não são “ views”.
E N D
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.
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). sA= c(one) sB< 5(one) sA= c AND B < 5(one) sA= c OR B < 5 (one) pG,H(three) one + two one Çtwo 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: 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). • 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: • 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). • Neste ponto existem regras, Si, com o predicado p na cabeça. Para cada regra gerar uma expressao relacional como segue: • 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). 3. Tomar a REUNIAO das expressoes geradas em 2.