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;
Download

RuleBasedDB