banco de dados relacional estendido
DESCRIPTION
Baixe mais arquivos em http://pastadomau.wikidot.com. Este trabalho mostra duas extensões do tradicional modelo relacional para banco de dados. Essas extensões do modelo relacional visam ampliar a aplicabilidade do banco de dados sem sacrificar o fundamento relacional. As duas extensões abordadas são: - Modelo Baseado em Lógica - Modelo Relacional Encaixado Nota importante: essa textura de fundo era moda nos anos 90.TRANSCRIPT
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