Sei sulla pagina 1di 36

Banco de Dados Relacional

Estendido
Igor Casa Nova dos Santos
Mauricio Volkweis Astiazara
Conceito
• É uma extensão do modelo Relacional
• Mantém as qualidades do modelo sem
sacrificar o fundamento relacional
• Alarga a aplicabilidade
• O torna menos restrito
Exemplos de BD Relacionais
Estendidos
• Modelo Baseado em Lógica
• Relacional Encaixado
Modelo Baseado em Lógica
Características
• Utiliza uma linguagem de consulta não
procedural
• É baseado na lógica de primeira ordem
É baseado em dois tipos de
Relação
• Relações Base, às vezes chamadas de BD
extensional
• Relações Derivadas, às vezes chamadas de
BD intencional
Estrutura da Consulta
Regra 1
[Programa Datalog] Regra 2
Regra n
Consulta

Instrução de Consulta
Estrutura de uma Regra

Cabeça Corpo

NovaRelação : - Literal 1, ... , Literal n, predicado


Literal
• Relação (campo 1, campo 2, ... , campo n)
• Ex.: Depósito (agência, número, cliente,
saldo)
Depósito(“Tramandaí”, X , Y , Z )
Ex. de Regra
• Rel (Y,X): - Depósito (“Tramandaí”, X, Y,
Z), Z>200
Instrução de Consulta
• Comando ?
Depósito (“Tramandaí”, X, Y, Z) ?
• Comando query
Query (Y): - Depósito (“Tramandaí”, X, Y,
Z) Z>1000
Ex. de Programa
Considerando o BD:
• Cliente (cliente, cidade, fone, renda,
número_revistas)
• Interesse (cliente, interesse)
• Assinatura (cliente, revista)
Vamos elaborar um programa que ao final
tenha uma relação que contenha o nome e
o fone dos clientes que tem renda maior
que R$ 1000 e interesse em informática.

R1 (N,F): - Cliente (N, C, F, R), R>1000


R2 (N,F): - Interesse (N, “informática”),
R1 (N,F)
Ex. de Consulta
Consultar nome e fone dos clientes da cidade de Torres que
tem renda maior que 1500 e assinam menos de 3 revistas.

X (Vcliente, Vfone, Vnúmero): - Cliente (Vcliente, “Torres”,


Vfone, Vrenda, Vnúmero), Vrenda>1500
Y (Vcliente, Vfone): - X (Vcliente, Vfone, Vnúmero),
Vnúmero<3
Y (Vcliente, Vfone) ?
Uma expressão equivalente usando a instrução de
consulta query ao invés de ? poderia ser:

X (Vcliente, Vfone, Vnúmero): - Cliente


(Vcliente, “Torres”, Vfone, Vrenda, Vnúmero),
Vrenda>1500
Query (Vcliente, Vfone): - X (Vcliente, Vfone,
Vnúmero), Vnúmero<3
Produto Cartesiano
• RelProduto (X1, ... , Xn, Y1, ... , Yn): - rel1
(X1, ... , Xn), rel2 (Y1, ... ,Yn)
União
RelUnião (X1, ... , Xn): - rel1 (X1, ... , Xn), predicado
RelUnião (X1, ... , Xn): - rel2 (X1, ... , Xn), predicado
Ex.: Consultar nome e renda de todos os clientes de Torres e
Tramandaí.
Rel (A,D): - Cliente (A, “Torres”, C, D, E)
Rel (A,D): - Cliente (A, “Tramandaí”, C, D, E)
Outra forma equivalente seria usar a instrução query:
Query (A,D) : - Cliente (A, “Torres”, C, D, E)
Query (A,D) : - Cliente (A, “Tramandaí”, C, D, E)
Diferença e Negação
RelDif (X1, ... , Xn): - R1 (X1, ... , Xn), ¬ R2 (X1, ... , Xn)
Ex.:Consultar o nome dos clientes que tem interesse em
“informática” mas não assinam a revista “Guia Digital”
A(X): - Interesse (X, “informática”)
B(X): - Assinatura (X, “Guia Digital”)
C(X): - A(X), ¬ B(X)
Recursividade
Vejamos um exemplo de sua utilização:
Uma tabela de funcionários contendo o seu nome
e o nome de seu gerente direto (primeiro acima
dele). Este gerente também é um funcionário e
está armazenado nesta mesma tabela, podendo ele
também ter um superior, formando assim uma
hierarquia gerencial.
Funcionário (nome, gerente)
Com o Datalog esta consulta é possível
utilizando recursividade. Ela poderia
apresentar a seguinte formulação:
Rel (X): - Funcionário (X, “Bia”)
Rel (X): - Funcionário (X, Y), Rel (Y)
Query (X): - Rel(X) ou Rel (X)?
Funcionários sob Rel são procurados e
quando encontrados são adicionados a Rel.
Vantagens
• A possibilidade de realizar consultas
recursivas aumenta as possibilidades de
modelagem e consulta.
• Devido à proximidade com a álgebra
relacional possibilita uma “pré-otimização”
da consulta aplicando-se as regras de
otimização algébrica.
Modelo Relacional Encaixado
Características
O modelo relacional encaixado é uma extensão do
módulo relacional no qual os domínios podem ser
valores atômicos ou assumirem valores que são
relações. Assim o valor de um atributo pode ser
uma relação, e o valor de um atributo dessa
relação pode ser outra relação. Isto permite a
construção de um objeto complexo que pode ser
representado em uma única tupla de uma relação
encaixada.
Para demonstrar esse modelo
usaremos o seguinte ex. de BD
que armazena informações sobre
Documentos:
Título do documento
• Lista de autores
• Data
• Lista de palavras-chave, palavras relativas
ao assunto que o documento trata.
Doc não normalizada
Título Lista_Autor Data Lista_Palavr
a-chave
Plano de{Samuel, 1/Abril/95 {Lucro,
venda João} Estratégia}

Relatório {João, Fábio} 17/Junho/97 {Lucro,


geral Pessoal}
A definição do esquema de Doc
• Doc=(Título, Lista_Autor, Data,
Lista_Palavra-chave)
• Lista_Autor=(Autor)
• Data=(Dia, Mês, Ano)
• Lista_Palavra-chave=(Palavra-chave)
consulta “Dê o título de todos os
documentos escritos por João que
dizem respeito a lucro”
• select Título
• from Doc
• where “João” in Lista_Autor
• and “Lucro” in Lista_Palavra-
chave
“Dê o ano de publicação dos
documentos escritos por João que
dizem respeito a lucro”
• select Título, (select ano from
data)
• from Doc
• where “João” in Lista_Autor
• and “Lucro” in Lista_Palavra-
chave
“Dê o título e número de autores
de cada documento”
• select Título, count (Lista_Autor)
• from Doc
Considerando o BD:
• Jogador (nome, pontuação)
• pontuação (rodada, pontos)

Consultar o nome e total de pontos dos


jogadores com mais de 100 pontos
Consultar o nome e total de
pontos dos jogadores com mais
de 100 pontos
• select nome, sum (select
pontos from pontuação)
• from Jogador
• where sum (select pontos from
pontuação)>100
O operador desencaixar pode transformar uma
tabela que está modelada de forma
encaixada (não normalizada) em uma na
1FN. Sintaxe:

unnest <tabela> on <campo> as


<novo campo>
Por exemplo desencaixar a lista de autores em
único campo para a relação Doc:

unnest Doc on Lista_Autor as


Autor
O operador encaixar transforma uma tabela
normalizada em uma encaixada

nest <tabela> on <campo> as


<novo campo>
As operações encaixar e desencaixar
podem ser usadas nas consultas.
Considerando o banco de dados
abaixo:

Cliente (codcliente, nome, fone)


NF (codcliente, data, valor)
“Dê o nome e a média de
compras de cada cliente”:
Select nome, avg (valor_total)
From (nest (select nome, valor,
codcliente from Cliente,
NotaFiscal where
Cliente.codcliente=NotaFiscal.cod
cliente) on valor as valor total)
Vantagens
• modelo de mais fácil entendimento e mais
intuitivo
• usuário típico de um sistema pensa na
organização das informações no modo não
normalizado.
• A representação em 4FN exigiria que os
usuários incluíssem junções

Potrebbero piacerti anche