View
110
Download
3
Category
Preview:
Citation preview
Banco de Dados com Regras:Banco de Dados com Regras:Ativos e DedutivosAtivos e Dedutivos
Jacques Robin & Frederico FernandesCIn-UFPE
BD ativos: definição e motivaçãoBD 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áticasBD 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áticasBD 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çãoBD ativos: exemplo didático de aplicação
on delete to Holderif delete.value > 0do instead <informa ao gerenciador do sistema>
Holder StockOwns
Stock#
name
qty
priceqtyvalue
coutry
name
Reg#
M N
BD ativos: dimensões para caracterizar BD ativos: dimensões para caracterizar modelos de conhecimentomodelos 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 BD ativos: agendamento da execução das regrasda execução das regras
on update to value of Holderif new.value = 0do <delete Holder | send message to manager>
DBT DBE DBC DBA
Evento Condição Ação
BindEBindC
BD ativos: dimensões para caracterizar BD ativos: dimensões para caracterizar modelo de execuçãomodelo 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}
Ocorrência do Evento
RegrasDisparadas
RegrasAvaliadas
RegrasSelecionadas
Fonte doEvento Execução
BD ativos: dimensões para caracterizar BD ativos: dimensões para caracterizar gerenciamento de regrasgerenciamento 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: arquiteturaBD ativos: arquitetura
Monitora a Condição
Detector de Evento
Agenda-mento
Avaliadorda Consulta
História
BD
Base de Regras
Conjunto de Conflito
eventosdetectados
regrasdisparadas
leituraescrita
leitura/escrita
leitura/escrita
notificação
Avaliação de condição
leituraescrita
leitura
açãoexecução
BD ativos: análise de regras BD ativos: análise de regras para segurança de execuçãopara segurança de execução
Terminação• Posso garantir que uma regra irá terminar ?• Ex: R1-R3 não, mas R1-R2-R4 sim
Confluência• A ordem de processamento de duas regras simultâneas
interfere no resultado ?• Ex:
R2 R3
R1
on insert to Owns or update to reg# of Owns or update to reg# of Holderif <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 Holderif <quantidade do estoque do Holder h é maior do que o do NumStocks>do <reduza a faixa de estoque do Holder h>
R4
BD ativos: análise de regras BD ativos: análise de regras para segurança de execução (Cont.)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:
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
on <evento E1>if <condição C1>do <mande uma mensagem>
on <evento E1>if <condição C1>do <abort>
Criação de Regras em OracleCriaçã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 OracleExemplo de Regra em Oracle
CREATE TRIGGER FazPedidoAFTER UPDATE OF NumItens ON EstoqueWHEN (New.NumItens < New.ValorMinimo)FOR EACH ROW
DECLARE NUMBER XBEGIN 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.)Exemplo de Regra em Oracle (Cont.)
T1: UPDATE Estoque SET NumItens = NumItens – 70 WHERE Item = 1
100200120
150500400
200780450
123
QuantidadePedidaValorMinimoNumItens#Item
Tabela1: Estoque
DataQuant.#Item
Tabela2: PedidosPendentes, antes de T1
Tabela3: PedidosPendentes, antes de T2
24/04/20001001
DataQuant.#ItemT2: UPDATE Estoque SET NumItens = NumItens – 60 WHERE Item >= 1
FazPedido
24/04/20001001
DataQuant.#Item
Tabela2: PedidosPendentes, após T1
Tabela3: PedidosPendentes, após T2
24/04/200024/04/2000
100120
13
DataQuant.#ItemFazPedido
Origens dos BD dedutivos: Origens dos BD dedutivos: programação em lógicaprogramaçã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 PrologBD 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:
Muitas mas nem todas das formulas da 1a ordem tem conjunto equivalente de cláusulas de Horn, cex:
Lógica de Horn: Interpretador/Compilador Prolog:
• provador de teorema para lógica de Horn• com hipótese do mundo fechado e negação por falha
CPP n1
Y)kills(X,animal(Y)r(X)animalLoveYX,
n1n11H1 hhfHorn,declaúsulash,h/LfL
BD dedutivos: unificação de termos BD dedutivos: unificação de termos PrologProlog
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 BD dedutivos: consulta West é West é criminoso?criminoso?
da lógica da 1a ordem para Prologda 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 BD dedutivos: consulta West é West é criminoso?criminoso?
processada por Prologprocessada por Prologcriminal(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 PrologBD 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 Limitações de Prolog como SGDB dedutivodedutivo
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
DatalogDatalog
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ísticasDatalog 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: exemploDatalog x SQL: exemplo
firstreq(Name) :- student(Name,Major,junior), took(Name,cs101,Grade1), took(name,cs143,Grade2).
?- firstreq(Name).
SELECT t.NameFROM took t, took u, student sWHERE 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 Semântica de Datalog baseada em modelosmodelos
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 Semântica de Datalog baseada em operador de ponto fixobaseada 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 Limitações de DataLog básico como linguagem de consulta em BDlinguagem 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 falhaProlog: 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çãoGrafo de dependência e estratificação
partCost(topTube,cinelli,20.00,14).partCost(topTube,columbus,15.00,6).
...assembly(bike,frame,1).assembly(bike,wheel,2).
...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.
howsoon
largertime4basic
fastestbasicSubpart
faster
assembly partCost
not
not
Strata 3
Strata 2
Strata 1
HiLogHiLog
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)
Limitação principal de HiLog: relações de aridade fixa, com elementos ordenados e acessíveis apenas por posição
Consultar esquema de BDD com HiLogConsultar 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, ...}
BD dedutivos: consultas declarativasBD dedutivos: consultas declarativas para conjuntos 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 RelationLog: tuplas aninhadas e conjuntos enumeradose 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_employees(cpsc,{[bob,{db,ai}], [joe,{os,pl,db}]})dept_employees(math,{[sam,{gt,cm,si}], [tom,{ca}]})
? - dept_employee(cpsc,<[X,<db>]>) Resposta:X = {bob, joe}? - dept_employee(_,<[_,<ai>]>) Resposta: yes
Representação:
Consulta:
Dept EmployeeName Areas
cpsc bob dbai
joe ospldb
math sam gtcmsi
tom ca
RelationLog: conjuntos com recursãoRelationLog: conjuntos com recursão
BDD RelationalLog sobre famíliaBDD 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 BD dedutivos: atualizações declarativasdeclarativas
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: Integração BDA / BDD: QuestõesQuestõ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: abordagensIntegraçã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;
Recommended