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
[Programa Datalog]
Consulta
Instrução de Consulta
Regra 1
Regra 2
Regra n
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
Plano
venda
Relatório
geral
Lista_Autor
de {Samuel,
João}
{João,
Fábio}
Data
1/Abril/95
Lista_Palav
ra-chave
{Lucro,
Estratégia}
17/Junho/97 {Lucro,
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_Palavrachave
“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_Palavrachave
“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
Autor
Doc
on
Lista_Autor
as
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
Download

Banco de Dados Relacional Estendido