Modelo de rede Modelo hierárquico - UBIhugomcp/bd2/t02.pdf · Modelo Relacional Modelo Relacional...
Transcript of Modelo de rede Modelo hierárquico - UBIhugomcp/bd2/t02.pdf · Modelo Relacional Modelo Relacional...
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
Proposto em 1970 por Codd, como uma forma mais fácil de armazenar e manipular dados em relação aos modelos manipular dados em relação aos modelos anteriores– Modelo de rede
Modelo hierárquico– Modelo hierárquico
Estes modelos tornavam o acesso à informação computacionalmente pesado.As estruturas necessárias para armazenar a informação (árvores, grafos) tornavam necessário o conhecimento anterior sobre a estrutura da informação.
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
No modelo de Codd, toda a informação é guardada em estruturas bidimensionais ( l õ )(relações)Os clientes apenas necessitam de se referir à informação sob a forma de referir à informação sob a forma de “linhas” e “colunas”O modelo original, baseado na teoria dos
j i i d i â i conjuntos, exigia que todas as instâncias de uma relação tivessem pelo menos um atributo distinto.
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
Actualmente os sistemas gestores de bases de dados não impõem esta
t i ãrestrição– Para algumas aplicações pode ser útil a
existência de linhas repetidas numa tabela.– No SGBD utilizado, podem existir várias
instâncias com todos os valores de atributos exactamente igual numa única relação.
Nome B.I. CodPostal
José 1234567 6200
José 1234567 6200José 1234567 6200
Rita 6272632 6300
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
A ideia nuclear do modelo relacional consiste na integridade referencial.Alguns atributos de uma relação são chaves primárias de outras e denotam a existência de uma relação lógica entre existência de uma relação lógica entre duas ou mais instâncias.
Nome B.I. Produto B.I. Produto Nome
José 1234567
Rita 6272632
Joana 6182930
2 1234567
1 6272632
1 6182930
1 Vaso
2 Pote
3 JarraJoana 6182930 1 6182930 3 Jarra
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
Apesar de não estar explicito na base de dados, podemos inferir que:
– “Um cliente chamado José comprou um Pote”– “Uma cliente chamado Rita comprou um Vaso”Uma cliente chamado Rita comprou um Vaso
É essencial garantir que para todas as h i chaves externas existe sempre o
correspondente conjunto de chaves primárias noutra relação.p ç
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
O SQL (Structured Query Language) é um standard de acesso a bases de dados relacionaisrelacionais– É uma linguagem de alto nível, de fácil
aprendizagem e bastante intuitiva.– Disponibiliza um conjunto de comandos que Disponibiliza um conjunto de comandos que
permitem a:• Manipulação da informação existente numa base
de dados (DML – Data Manipulation Language):– Inserção (INSERT)– Remoção (DELETE)– Actualização (UPDATE)– Consulta (SELECT)Consulta (SELECT)
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
• Manipulação da estrutura de uma base de dados (DDL - Data Definition Language)
– Criação de relações (CREATE TABLE)ç ç ( )– Remoção de relações (DROP TABLE)– Alteração de relações (ALTER TABLE)
• Administração dos utilizadores e privilégios associados a cada um, bem como a customização do sistema gestor de bases de dados (DAL – Data Administração Language)Administração Language)
– Criação de utilizadores (CREATE USER)– Definição de privilégios (GRANT)– ...
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional –– Junções Junções
Existem duas formas distintas de explicitar a união entre 2 relações:
– Forma ANSI-92– Forma T-SQL, agora ANSI
Para juntar 2 relações é necessário que elas possuam algo em comum: "Chave-Comum"
Chama-se “chave-comum”, ou “chave de junção”, ao conjunto de atributos partilhados pelas relações e que permitem a manutenção de significado após a junçãosignificado após a junção.
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional –– Junções Junções
Normalmente o relacionamento é algo definido ao nível lógico.
O sistema gestor de bases de dados não dispõe de informação sobre os relacionamentos possíveis entre relações de uma base de dadosentre relações de uma base de dados.
Produto B I Produto DepartamentoProduto B.I.
2 1234567
1 6272632
1 6182930
Produto Departamento
1 2
2 3
3 1?1 6182930 3 1?
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional –– Junções Junções Cliente Venda
Codigo Nome Morada CodPostal
2 Joana Xyz 6200
CodProd CodCli Data Quant. PreçoUn
1 1 1/01/04 2 100
Cliente Venda
1 Rita Abc 1000
3 Paula Def 1000
1 3 1/01/04 3 20
2 3 3/01/04 1 21
Junção Natural ANSI-92
SELECT *SELECT *FROM Venda V, Cliente CWHERE V.CodCli=C.Codigo;
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional –– Junções Junções Junção Natural T-SQL (ANSI)
SELECT *SELECT FROM Venda V INNER JOIN Cliente CON V.CodCliente=C.Codigo;
Com mais que duas relações,...
SELECT *SELECT FROM Venda V INNER JOIN Cliente C
ON V.CodCliente=C.CodigogINNER JOIN Produto P
ON V.CodProduto=P.Codigo;
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional -- JunçõesJunções
Em todas as junções (naturais) efectuadas até ao momento, eram excluídas as instâncias de qualquer das relações que não tivessem o valor correspondente na outra relação (Inner Join).
Na maior parte dos casos, estas consultas não são as i ú imais úteis.
A B C
RC D
S R ∞ Sa1 b1 c1
a2 b2 c2
a3 b3 c3
a b c
c1 d1
c0 d2
c2 d3
c d
A B C D
a1 b1 c1 d1
a2 b2 c2 d3
a2 b4 c4 c5 d2
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional -- JunçõesJunções
Existe um outro tipo de junção que permite a devolução de instâncias com e sem valor correspondente na outra relação (junção não-natural, Outer Join).
Para efectuar uma junção não-natural entre duas relações deve-se explicitar qual a que servirá de base
j ã ã d f lpara a junção. Por esta razão pode-se falar em:
– "left outer join" (*=) "right outer join"( *)– "right outer join"(=*).
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional -- JunçõesJunções
Imagine o seguinte esquema de relações:
Empregado TrabalhoCodigo Nome
2 Joana
1 Rita
CodEmpregado
Data Departamento
Horas
1 1/01/04 2 11
1 1/01/04 3 1
– Elabore um ranking relativo ao total de horas
3 Paula1 1/01/04 3 1
2 3/01/04 1 5
gde trabalho efectuado por cada empregado de uma empresa.
• Uma junção natural poderia omitir aqueles que nem sequer tinham trabalhado nenhuma horanem sequer tinham trabalhado nenhuma hora
Hugo Pedro Proença, © 2007
Modelo Relacional Modelo Relacional -- JunçõesJunções
A solução passaria por uma junção não natural, neste caso um “left-outer join”:
select E.Codigo, E.Nome, Sum(T.Horas) AS TotalFROM Empregado E, Trabalho TFROM Empregado E, Trabalho TWHERE E.Codigo*=T.CodEmpregadoORDER BY Total DESC
Codigo Nome Total
1 Rita 12
2 Joana 5
3 Paula 0
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Avalia um conjunto de possibilidades para determinado atributo de cada instância d l ã t dif t de uma relação e retorna diferentes resultados.
– Tem como finalidade potenciar a eficiência de um cliente da base de dados, ao diminuir o número de consultas necessárias para obter e número de consultas necessárias para obter e formatar toda a informação necessária
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Exemplo:– A Empresa “SoConstroi” deseja enviar para
t d li t t d btodos os seus clientes uma carta de boas-festas:
• Uma solução poderia passar por uma consulta SQL que devolva como informação o contéudo SQL que devolva como informação, o contéudo das respectivas cartas:
– SELECT “Exmo Sr ”, C.Nome, “\t\t”, C.Morada, SELECT Exmo Sr , C.Nome, \t\t , C.Morada, C.CodPostal, “\nA SOConstroi deseja-lhe um Feliz Natal e Próspero Ano Novo”
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Esta consulta iria devolver uma relação que, posteriormente processada por uma aplicação cliente, poderia formatar e imprimir as cartas cliente, poderia formatar e imprimir as cartas desejadas:
– SELECT “Exmo Sr ”+C.Nome+“\t\t” + C.Morada+ C.CodPostal+CP.Cidade+“\nA SOConstroi deseja-lh F li N l P ó A N ” AS lhe um Feliz Natal e Próspero Ano Novo” AS cartaFROM Cliente C, CodPostal CPWHERE C.CodPostal=CP.CodPostal
Carta
Exmo Sr José Carlos Rua XYZ 6200 CovilhãA SOConstroi deseja-lhe um Feliz Natal e Próspero Ano Novo
Exmo Sr Andreia Silva Rua ABC 1000 CovilhãExmo Sr Andreia Silva Rua ABC 1000 CovilhãA SOConstroi deseja-lhe um Feliz Natal e Próspero Ano Novo
...
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Exemplo 2:– Uma instituição bancária deseja enviar uma
tifi ã t d li t i f ã notificação a todos os clientes com informação qualitativa sobre o estado do seu saldo.
• O mesmo tipo de consulta obrigava aExecução de 2 consultas– Execução de 2 consultas
• Uma para os clientes com saldo positivo• Outra para clientes com saldo negativo
– Execução de consulta com união• Computacionalmente pesada• Elevados recursos gastos
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Nesta situação poderia utilizar a clausula CASE:SELECt "Exmº Sr.“+Nome+Morada As “Inicio” CASECASE
WHEN Saldo < 0 THEN "Cliente com saldo negativo"
WHEN Saldo < 1000 THEN "Cliente com WHEN Saldo < 1000 THEN "Cliente com saldo positivo"
ELSE "Cliente Milionario"" l ifi "END "Classificacao"
FROM ClienteORDER BY Classificacao, PrimeiroNome
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
A clausula permite a avaliação do atributo “Saldo” para cada instância da relação “Cli t ” t l “Cliente” e consoante o seu valor devolver um resultado diferente.– Na Clausula CASE, é garantido que apenas uma , g q p
condição é avaliada positivamente.• Por esta razão o teste (<0) aparece antes de
(<1000)
– Caso nenhuma tenha valor lógico positivo, é avaliado o bloco a seguir a “ELSE”
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Resultado:
Início Classificação
Exmo Sr José Carlos Rua XYZ
Cliente com saldo negativo
Exmo Sr Andreia Silva Rua ABC
Cliente com saldo positivo
Exmo Sr Silvana Andrade Rua DER
Cliente milionário
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Exemplo 2:
Uma livraria necessita de um relatório onde esteja – Uma livraria necessita de um relatório onde esteja indicado a quantidade total de vendas de cada livro num ano.
– Além deste requisito, deseja a informação num Além deste requisito, deseja a informação num formato específico:
• Livro, AnoX, AnoY, AnoZ
– Este ultimo requisito inviabiliza a utilização de uma clausula de agregação por livro e ano, que produziria informação para o mesmo livro em anos diferentes em diferentes linhas em diferentes linhas
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Exemplo 2:
SELECT L.ISBN, L.Titulo, SUM( CASE V.Ano, , (WHEN 2001 THEN V.QuantidadeELSE 0END ) "2001",
SUM( CASE V.AnoWHEN 2002 THEN V.QuantidadeELSE 0END ) "2002",
SUM( CASE V.AnoWHEN 2003 THEN V Q id dWHEN 2003 THEN V.QuantidadeELSE 0END ) "2003"
FROM Livro L, Venda VWHERE L ISBN=V ISBNWHERE L.ISBN=V.ISBNORDER BY L.Titulo
Hugo Pedro Proença, © 2007
Clausulas CASEClausulas CASE
Exemplo 2 - Resultado:
ISBN Título 2001 2002 2003
1 ABCD 12 11 13
3 XYZ 5 25 75
2 ZQQA 0 3 1
Hugo Pedro Proença, © 2007
Modelo RelacionalModelo Relacional
Exercício:– Uma empresa de sondagens pretende construir
uma base de dados para guardar informação uma base de dados para guardar informação sobre todas as pessoas entrevistadas. Para cada indivíduo é necessário registar o nome, data de nascimento, profissão e morada. O
bl é i it ã problema é que os requisitos são extremamente dinâmicos e, consoante a profissão, é necessário constantemente alterar a informação a guardar.a informação a guardar.
– Proponha um modelo de base de dados que possa fornecer uma solução ao problema.