Banco de Dados Relacional Estendido Igor Casa Nova dos Santos Mauricio Volkweis Astiazara.
Transcript of Banco de Dados Relacional Estendido Igor Casa Nova dos Santos Mauricio Volkweis Astiazara.
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ógicaCaracterí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 nConsulta
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 ProgramaConsiderando 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>1000R2 (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>1500Y (Vcliente, Vfone): - X (Vcliente, Vfone, Vnúmero), Vnúmero<3Y (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>1500Query (Vcliente, Vfone): - X (Vcliente, Vfone, Vnúmero), Vnúmero<3
Produto Cartesiano
• RelProduto (X1, ... , Xn, Y1, ... , Yn): - rel1 (X1, ... , Xn), rel2 (Y1, ... ,Yn)
UniãoRelUnião (X1, ... , Xn): - rel1 (X1, ... , Xn), predicadoRelUnião (X1, ... , Xn): - rel2 (X1, ... , Xn), predicadoEx.: 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 normalizadaTítulo Lista_Autor Data Lista_Palav
ra-chave
Plano de venda
{Samuel, João}
1/Abril/95 {Lucro, Estratégia}
Relatório geral
{João, Fábio}
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_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
unnest <tabela> on <campo> as <novo campo>
O operador desencaixar pode transformar uma tabela que está modelada de forma encaixada (não normalizada) em uma na 1FN. Sintaxe:
Por exemplo desencaixar a lista de autores em único campo para a relação Doc:
unnest Doc on Lista_Autor as Autor
nest <tabela> on <campo> as <novo campo>
O operador encaixar transforma uma tabela normalizada em uma encaixada
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.codcliente) 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