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.