Banco de Dados com Regras: Ativos e Dedutivos Jacques Robin & Frederico Fernandes CIn-UFPE BD ativos: definição e motivação Modelar declarativamente interação complexa entre comportamentos e dados em grande quantidades Diminuir custo do controle dos dados (ex, restrições) Idéia: mover classes de comportamentos ativos comuns a várias aplicações para o BD BD ativo deve oferecer: • um modelo de conhecimento (uma descrição do mecanismo) • um modelo de execução (estratégias à nível de execução) Regras: Eventos, Condição, Ação (ECA) BD ativos: aplicações práticas Extensão para sistemas de BD: • Restrições de integridade, visões materializadas, dados derivados • Ex: on insert into wire if insert.voltage > any (select max-voltage from wire-type where type = insert.type) do <action> Implementação no BD de aplicações fechadas: • Comportamento interno dos dados da aplicação • Ex: BD ativos: aplicações práticas • Ex: On update to value of Holder if new.value = 0 do begin delete from Holder where reg# = update.reg#; insert into VoidHolder values (update.reg#, update.name, update.address, today) end Implementação no BD de aplicações abertas: • Respostas para dispositivos ou software fora do BD • Ex: on update to pos of aircraft if exists (select * from aircraft Other where distance (Other.pos, new.pos) < 5000 and distance (Other.pos, old.pos) > 5000) do <envia mensagem ao controlador> BD ativos: exemplo didático de aplicação Reg# Stock# name name Holder M Owns N Stock qty coutry value qty price on delete to Holder if delete.value > 0 do instead <informa ao gerenciador do sistema> BD ativos: dimensões para caracterizar modelos de conhecimento Evento • Fonte {operação estruturada, invocação do comportamento, transação, abstrato, exceção, relógio, externo} • Granularidade {membro, subconjunto, conjunto} • Tipo {primitivo, composto} • Operadores {or, and, seq, closure, times, not} • Modo de Consumo {recente, crônico, acumulativo, contínuo} • Papel {obrigatório, opcional, nenhum} Condição • Papel {obrigatório, opcional, nenhum} • Contexto {DBT, BindE, DBE, DBC} Ação • Opções {operação estruturada, invocação do comportamento, regras de atualização, notificação de aborto, externo, do instead} • Context {DBT, BindE, DBE, DBC, DBA} BD ativos: agendamento da execução das regras BindC BindE Evento DBT DBE Condição Ação DBC DBA on update to value of Holder if new.value = 0 do <delete Holder | send message to manager> BD ativos: dimensões para caracterizar modelo de execução Modo de condição {imediato, adiado, desligado} Modo de ação {imediato, adiado, desligado} Granularidade de Transição {tupla, conjunto} Net-effect policy {sim, não} Cycle policy {interativo, recursivo} Prioridades {dinâmico, numérico, relativo, nenhum} Agendamento {paralelo, sequencial, saturação, algum } Manipulação do Erro {abortar, ignorar, backtrack, contingência} Fonte do Evento Ocorrência do Evento Regras Disparadas Regras Avaliadas Regras Selecionadas Execução BD ativos: dimensões para caracterizar gerenciamento de regras Descrição {linguagem de programação, linguagem de consulta, objetos} Operações {ativar, desativar, sinalizar} Adaptabilidade {tempo de compilação, tempo de execução} Modelo de Dados {relacional, relacional extendido, dedutivo, orientado a objeto} Suporte para programador {consulta, trace} BD ativos: arquitetura Conjunto de Conflito Base de Regras leitura escrita leitura Detector de Evento eventos detectados Monitora a Condição regras disparadas Agendamento Avaliação de condição leitura escrita notificação História BD ação execução leitura/escrita leitura/escrita Avaliador da Consulta BD ativos: análise de regras para segurança de execução Terminação R1 • Posso garantir que uma regra irá terminar ? • Ex: R1-R3 não, mas R1-R2-R4 sim Confluência R2 R3 R4 • A ordem de processamento de duas regras simultâneas interfere no resultado ? • Ex: on insert to Owns or update to reg# of Owns or update to reg# of Holder if <mudança afetar a quantidade do estoque do Holder h> do <update NumStocks attribute of h> on insert to Owns or update to reg# of Owns or update to reg# of Holder if <quantidade do estoque do Holder h é maior do que o do NumStocks> do <reduza a faixa de estoque do Holder h> BD ativos: análise de regras para segurança de execução (Cont.) Determinismo observável • O efeito observável de uma regra por um usuário do sistema, é independente da ordem em que as regras são disparadas ? • Ex: on <evento E1> on <evento E1> if <condição C1> if <condição C1> do <abort> do <mande uma mensagem> Depuração de regras • Dificuldade em visualizar terminação, confluência e determinismo observável em grandes bases de regras. • Necessita ferramentas sofisticadas de análise de interação entre regras, especialmente temporal Criação de Regras em Oracle <oracle-trigger> ::= CREATE TRIGGER <nome-do-trigger> { BEFORE | AFTER } <eventos trigger> ON <nome-da-tabela> [[ REFERENCING <referências> ] FOR EACH ROW [ WHEN (<condition>) ]] <PL / bloco SQL> <evento trigger> ::= INSERT | DELETE | UPDATE [ OF <nome-das-colunas> ] <referência> ::= OLD AS <valor antigo de um atributo> NEW AS < valor novo de um atributo> Exemplo de Regra em Oracle CREATE TRIGGER FazPedido AFTER UPDATE OF NumItens ON Estoque WHEN (New.NumItens < New.ValorMinimo) FOR EACH ROW DECLARE NUMBER X BEGIN SELECT COUNT (*) INTO X FROM PedidosPendentes WHERE ItemPedido = New.ItemPedido; IF X = 0 THEN INSERT INTO PedidosPendentes VALUES (New.ItemPedido, New.QuantidadePedida, SYSDATE) END IF; END; Exemplo de Regra em Oracle (Cont.) #Item NumItens ValorMinimo QuantidadePedida 1 2 3 200 780 450 150 500 400 100 200 120 Tabela1: Estoque T1: UPDATE Estoque SET NumItens = NumItens – 70 WHERE Item = 1 FazPedido #Item Quant. Data 1 100 24/04/2000 Tabela2:PedidosPendentes, PedidosPendentes,antes apósde T1T1 Tabela2: FazPedido #Item T2: UPDATE Estoque SET NumItens = NumItens – 60 1 WHERE Item >= 1 3 Quant. Data 100 120 24/04/2000 24/04/2000 Tabela3: Tabela3:PedidosPendentes, PedidosPendentes,antes apósdeT2T2 Origens dos BD dedutivos: programação em lógica Metáfora da programação em lógica: • Teoria lógica (TL) = especificação formal = programa executável = Base de conhecimento (BC) de agente inteligente = BD dedutivo • Unifica: teoria da computação, engenharia de software, BD e IA Axiomas da TL = fatos iniciais da BC = dados explícitos de um BD tradicional = parte extensional do BDD Regras da TL = regras da BC = parte intencional do BDD Teoremas da TL, deduzidos pela aplicações da regras sobre os axiomas (e teoremas) = fatos derivados da BC = dados implícitos do BDD Programar = especificar = declarar axiomas e regras Executar programa = provar teorema = disparar motor de inferência do agente sobre sua BC = consultar BDD BD dedutivos: definição de Prolog Prolog: • Linguagem de programação de propósito geral (turing-complete) • Primeira, mais simples e ainda mais usada do paradigma lógico Programa Prolog: • conjunto implicitamente conjuntivo de cláusulas de Horn, i.e., • formulas da lógica da 1a ordem da forma: P1 Pn C Muitas mas nem todas das formulas da 1a ordem tem conjunto equivalente de cláusulas de Horn, cex: X, Y animalLover(X) animal(Y) kills(X, Y) Lógica de Horn: LH1 f L1/h1 , h n claúsulas de Horn, f Interpretador/Compilador Prolog: h1 h n • provador de teorema para lógica de Horn • com hipótese do mundo fechado e negação por falha BD dedutivos: unificação de termos Prolog Substituição de variáveis de um termo (ou formula) f: • conjunto de pares Var/termo Unificação de 2 termos f e g: • substituição S das variáveis de f e g tal que S(f)=S(g) • 2 resultados: S r=S(f)=S(g) Exemplos: ?- prof(X,disc(Y,dept(di,ufpe))) = prof(geber,disc(ia,Z)). X = geber, Y = ia, Z = dept(di,ufpe). ? prof(X,disc(X,dept(di,ufpe))) = prof(geber,disc(ia,Z)) fail Unificador mais geral: com menor número de variáveis instanciadas Substituição mínima: com menor número de pares Var/const BD dedutivos: consulta West é criminoso? da lógica da 1a ordem para Prolog Em L1: P,W,N american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(P) 2. W owns(nono,W) missile(W) 3. W owns(nono,W) missile(W) sells(west,nono,W) 7. X missile(W) weapon(W) 8. X enemy(N,america) hostile(N) 4. american(west) 5. nation(nono) 6. enemy(nono,america) 9. nation(america) Em Prolog: criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). sells(west,nono,W) :- owns(nono,W), missile(W). weapon(W) :- missile(W). hostile(N) :- enemy(N,america). american(west). nation(nono). enemy(nono,america). nation(america). BD dedutivos: consulta West é criminoso? processada por Prolog criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). sells(west,nono,W) :- owns(nono,W), missile(W). weapon(W) :- missile(W). hostile(N) :- enemy(N,america). american(west). nation(america). enemy(nono,america). nation(nono). criminal(west)? <- yes. •american(west)? -> yes. •weapon(W)? <- W = m1. missile(W)? -> W = m1. •nation(N)? -> N = america. •hostile(america)? <- no. enemy(america,america)? -> no. •backtrack: nation(N), N \ {america}? -> N = nono. •hostile(nono)? <- yes. enemy(nono,america)? -> yes. •sells(west,nono,m1)? <- yes. owns(nono,m1)? -> yes. missile(nono,m1)? -> yes. BD dedutivos: controle e busca de Prolog Aplica regra de resolução: • tupla por tupla • com estratégia linear (sempre tenta unificar ultimo fato a provar com a conclusão de uma cláusula do programa), • na ordem de escritura das cláusulas no programa, • com encadeamento de regras para trás, • busca em profundidade e • da esquerda para direita das premissas das cláusulas, • e com backtracking sistemático e linear quando a unificação falha, • e sem occur-check na unificação. Limitações de Prolog como SGDB dedutivo Sem semântica declarativa para: • • • • • negação por falha atualizações do BD manipulação de conjuntos consulta do esquema do BD resultado depende da ordem das cláusulas e das premissas Não fornece built-in a maioria dos serviços de BD: • • • • persistência concorrência transações operadores de agregação Pode entrar em loop infinita com algumas regras recursivas Devolve respostas a consulta: • uma por uma • BD devolvem todas de uma vez Conseqüêntemente: • inadequado para otimização de consultas • especialmente as envolvendo quantidade de dados que não cabe inteiramente na RAM Datalog Sub-linguagem de Prolog usado como modelo de dados padrão em BD dedutivos Mais expressivo do que cálculo relacional mas menos expressivo do que cálculo do predicados da 1a ordem Exclui maioria dos predicados built-in de Prolog com semântica declarativa fora da lógica da 1a ordem Datalog básico adicionalmente exclui termos aninhados • ex, person(name(FirstName,LastName),weight(Value,Unit)) Datalog é apenas uma notação independente de qualquer estratégia de resolução SGBD Datalog usam variedade de tais estratégias Datalog x SQL: características Predicado de base Datalog = tabela ou relação SQL Predicado derivado Datalog = visão SQL Fato Datalog = linha ou tuple SQL Argumento de predicado Datalog = coluna ou atributo SQL Regras Datalog permitem definições recursivas de visões Interpretadores e compiladores Datalog diferem de Prolog por tentar: • garantir independência dos resultados das consultas da ordem das cláusulas e premissas do BD Datalog • garantir terminação de qualquer consulta sintaticamente correta Datalog x SQL: exemplo firstreq(Name) :student(Name,Major,junior), took(Name,cs101,Grade1), took(name,cs143,Grade2). ?- firstreq(Name). SELECT t.Name FROM took t, took u, student s WHERE t.Course = ‘cs101’ AND u.Coruse = `cs143’ AND t.Name = u.Name AND s.Year = ‘junior’ AND s.Name = t.Name Semântica de Datalog baseada em modelos Universo de Herbrand: U(D) = const(D) U {f(..., c , ...) | f func(D) c const(D)}. Base de Herbrand: B(D) = U(D) U {p(…, g, …) | p pred(D) g B(D)}. Modelo de Herbrand: M(D) = {g B(D) | D |= g}. Exemplo: D = {male(paulo). female(ana). male(joao). parent(paulo,joao). parent(ana,joao). father(F,C) :- parent(F,C), male(F). mother(M,C) :parent(F,C), female(M).} U(D) = {paulo,ana,joao} B(D) = {male(paulo). male(ana). male(joao). female(paulo). female(ana). female(joao). father(paulo,ana). father(paulo,joao). father(ana,joao). father(ana,paulo). father(joao,paulo).father(joao,ana). mother(paulo,ana). mother(paulo,joao). mother(ana,joao). mother(ana,paulo). mother(joao,paulo).mother(joao,ana). parent(paulo,ana). parent(paulo,joao). parent(ana,joao). parent(ana,paulo). parent(joao,paulo).parent(joao,ana).} M(D) = {male(paulo). female(ana). male(joao). parent(paulo,joao). parent(ana,joao). father(paulo,joao). mother(ana,joao).} Semântica de Datalog baseada em operador de ponto fixo ground(D) = {regras de D instanciadas com elementos de U(D)}. Operador de conseqüências imediatas: • To(D) = B(D). • Tn(D) = Tn-1(D) U {c B(D) | r: c :- p1, ...pN ground(D) p1, ...,pN Tn-1(D)}. Exemplo: • D = {anc(X,Y) :- parent(X,Y)., anc(X,Z) :- anc(X,Y), parent(Y,Z)., • parent(X,Y) :- father(X,Y)., parent(X,Y) :- mother(X,Y)., • mother(anne,silvia)., mother(anne,marc).} • T1(D) = {anc(marc,silvia).,anc(anne,silvia)., mother(anne,silvia)., • mother(anne,marc)., mother(anne,silvia).} Limitações de DataLog básico como linguagem de consulta em BD Negação por falha Valores complexos: estruturas e conjuntos Consulta ao esquema Atualizações Transações Prolog: • fornece predicados built-in para todas essas funcionalidades, exceto transações • porém sem semântica declarativa lógica sem segurança sobre terminação e corretude das consultas Desafios de BDD: • definir e implementar extensões de DataLog básico • fornecendo esses serviços com uma semântica declarativa Prolog: problema da negação por falha Permite raciocínio não monótono: ave(piupiu). papa_leguas(bipbip). ave(X) :- papa_leguas(X). voa1(X) :- ave(X), not papa_leguas(X). voa1(X)? -> X = piupiu ; no. Sem semântica declarativa em L1 Depende da ordem, ex: voa2(X) :- not papa_leguas(X), ave(X). voa2(X)? -> no. Pode tornas resolução de Prolog inconsistente • ex: edge(a,b). sink(X) :- not edge(X,Y). sink(a)? -> no. sink(b)? -> yes. sink(X)? -> no. Grafo de dependência e estratificação partCost(topTube,cinelli,20.00,14). partCost(topTube,columbus,15.00,6). Strata 3 howsoon ... assembly(bike,frame,1). assembly(bike,wheel,2). not larger time4basic ... basicSubparts(Bsp,Bsp) :- partCost(Bsp,_,_,_). basicSubparts(Part,Bsp) :assembly(Part,Sp,_), basicSubparts(Sp,Bsp). fastest(Part,Time) :- partCost(Part,Sup,Cost,Time), not faster(Part,Time). faster(Part,Time) :- partCost(Part,Sup,Cost,Time), partCost(Part,Sup1,Cost1,Time1), Time1 < Time. time4basic(AssPart,BasicSub,Time) :basicSubparts(AssPart,BasicSub), fastest(BasicSub,Time). howsoon(AssPart,Time) :time4basic(AssPart,BasicSub,Time), not larger(AssPart,Time). larger(Part,Time) :- time4basic(Part,_,Time), time4basic(Part,_,Time1), Time1 > Time. basicSubpart fastest Strata 2 not Strata 1 assembly faster partCost HiLog Extensão sintática de Prolog e Datalog permitindo variáveis em posição de predicados: • internamente traduzido por expressão da 1a ordem e assim a semântica de HiLog permanece na lógica da 1a ordem. • Útil para aplicações requerendo meta-programação, como consulta de esquema de BDD Exemplos de expressões HiLog e suas traduções em termos da 1a ordem: X(Y, Z, Y(W)) traduzido para apply(X,Y,Z,apply(Y,W)) h(map(P)(A,B))(C) traduzido para apply(apply(h,apply(map(P),A,B)),C) Consultar esquema de BDD com HiLog hardware(joe,30,2200). software(paulo,26,2200). admin(magaly,29,1500). ... p1(R) :- R(_,_,_). ?- p1(R). R = {hardware,software,admin} ?- p2(R). R = hardware ?- p3(N). N = {joe,paulo,magaly, ...} Limitação principal de HiLog: relações de aridade fixa, com elementos ordenados e acessíveis apenas por posição BD dedutivos: consultas declarativas para conjuntos Datalog básico sem tuplas aninhadas, nem conjuntos Prolog tem: • funtores, ex, computador(dono(nome(Fernandes, Frederico))) • predicado setof(X,Condição(X),ListaResultado) para conjuntos como listas, sem semântica declarativa na lógica da 1a ordem RelationLog: extensão de Datalog com • definição e acesso a tuplas aninhadas • definição de conjuntos: em extensão (semântica de igualdade via enumeração) parcialmente (semântica de inclusão) • agrupamento de elementos de conjuntos, mesmo em regras diferentes e recursivas • semântica declarativa na lógica da 1a ordem RelationLog: tuplas aninhadas e conjuntos enumerados Operadores: • [] para tuplas aninhadas, • {} para definição em extensão de conjuntos • <> para agrupamento em conjuntos especificado apenas por inclusão Exemplo: Dept Name cpsc Employee Areas bob joe Representação: dept_employees(cpsc,{[bob,{db,ai}], [joe,{os,pl,db}]}) dept_employees(math,{[sam,{gt,cm,si}], [tom,{ca}]}) Consulta: ? - dept_employee(cpsc,<[X,<db>]>) ? - dept_employee(_,<[_,<ai>]>) math sam tom Resposta:X = {bob, joe} Resposta: yes db ai os pl db gt cm si ca RelationLog: conjuntos com recursão BDD RelationalLog sobre família: fatherof(bob,tom) motherof(bob,pam) fatherof(pam,john) motherof(john,becky) parentsof(X,<Y>) :- fatherof(X,Y). parentsof(X,<Y>) :- motherof(X,Y). ancestorof(X,<Y>) :- parentsof(X,<Y>) ancestorof(X,<Y>) :- parentsof(X,<Z>), ancestorsof(Z,<Y>) Consultas: ? - parentsof(bob,P). P = {pam, tom}. ? - ancestorsof(bob,A). A = {becky, john, tom, pam} RelationLog e predecessores (LDL, COL, Hilog) não funcionam com valores nulos. BD dedutivos: atualizações declarativas Transaction Logic: atualizações e transações em linguagem dedutiva com semântica formal declarativa bem definida operadores del:, ins: e conjunção serializada ? - del : employee(joe,toy,10K), ins : employee(joe,shoe,10K) ? - del : employee(joe,toy,Sal) ins : employee(joe,shoe,Sal) hire(Name, Dept, Sal) :- ins : employee(Name, Dept, Sal) avg_sal(Dept, Avg) Avg <= 50K. Integração BDA / BDD: Questões Como suportar eventos em um processamento de regras dedutivas ? Como suportar transição de estado em um processamento de regras dedutiva ? Como suportar interação com o gerenciamento de transação em um processamento de regra dedutiva ? Como suportar uma visão baseada em lógica de um BD com processamento de regra ativa ? Integração BDA / BDD: abordagens Estender BDA com dedução Estender BDD com ações Problema: semântica formal e segurança das ações “loose-coupling” usando histórias de eventos • Eventos declarados com regras dedutivas. A detecção do evento tem uma semântica lógica; • Estados do BD guardados em relação ao tempo. Em cima deles podem ser escritas regras dedutivas; • Os eventos causado pela execução do componente ação em uma regra ativa precisa apenas ser adicionada no fim;