Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos...
Transcript of Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos...
![Page 1: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/1.jpg)
Banco de Dados I
Prof. Diego Buchinger
Profa. Rebeca Schroeder Freitas
Prof. Fabiano Baldo
![Page 2: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/2.jpg)
Projeto Lógico
![Page 3: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/3.jpg)
Projeto Lógico
Pode haver “n” maneiras de
“implementar” uma representação
abstrata (conceitual)
Modelo representado de forma textual
Representa como os dados serão agrupados
Se baseia na tecnologia de BD
Modelo
Conceitual
Modelo
Lógico #1
Modelo
Lógico #n
![Page 4: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/4.jpg)
Projeto Lógico
É um modelo baseado em regras
Objetivos e Princípios:
Bom desempenho
Evitar junções de registros – ter os dados necessários em
um único registro
Diminuir número de chaves; evitar chaves desnecessárias –
chaves ocupam espaço adicional em disco
Evitar campos opcionais
Menor manutenibilidade
![Page 5: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/5.jpg)
Projeto Lógico
Passos para a transformação [conceito] → [lógico]
1. Tradução das Entidades e seus Atributos
2. Tradução de Generalizações / Especializações
3. Tradução de Relacionamentos e seus Atributos
* Passos para a transformação em modelo relacional
![Page 6: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/6.jpg)
Projeto Lógico
Nomenclatura :
Chave Primária: atributo identificador;
identifica unicamente um registro
Chave Estrangeira: uma referência a chave primária
de outra tabela
Chave Alternativa: atributo identificador que não é
uma boa chave primária, pois seria uma chave
estrangeira ruim
Representação:
NomeTabela (coluna1, coluna2, ... , coluna n)
![Page 7: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/7.jpg)
Mapeamento de Entidades e Atributos
Entidade → Tabela
Atributo de Entidade → Coluna da Tabela
Atributos Identificadores → Chave Primária
Livros (#ISBN, titulo, edicao)
Notação:
# – atributo que faz parte de chave primária
& – atributo que faz parte de chave estrangeira
[] – atributo opcional
![Page 8: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/8.jpg)
Mapeamento de Entidades e Atributos
Exemplo: Como ficaria o mapeamento lógico?
![Page 9: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/9.jpg)
Mapeamento de Atributo
Opcional, Composto e Multivalorado
Atributo opcional se torna uma coluna opcional
Atributo composto é decomposto em colunas
Atributo multivalorado se torna uma nova tabela
Clientes ( #RG , nome , [CNH] , rua , bairro , CEP )
Email ( #&RG , #email ) ou Email ( #cod, &RG , email )
Poderia ser
Email( #&RG, email )
???
![Page 10: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/10.jpg)
Mapeamento de Especializações
Tabela única para toda hierarquia
Atributos de entidade especializada vira opcional
Cria-se restrições de integridade para especializações
Restrições de Integridade:
se Pessoa Física
→ tipo = 1 / CPF ≠ null
se Pessoa Jurídica
→ tipo = 2 / CNPJ ≠ null
Pessoas ( #código , nome, endereco, [CPF] , [CNPJ] )
![Page 11: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/11.jpg)
Mapeamento de Especializações
Tabelas para entidade genérica e especializadas
Entidades especializadas ganham chave estrangeira
Pessoas ( #código , nome , endereco )
PessoasFisicas (#&código , CPF )
PessoasJurídicas (#&código , CNPJ )
![Page 12: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/12.jpg)
Mapeamento de Especializações
Tabelas somente para as entidades especializadas
Entidades especializadas herdam atributos da
entidade genérica
Não aplicável a especializações parciais!
PessoasFisicas (#&código ,
nome , endereco , CPF )
PessoasJurídicas (#&código ,
nome , endereco , CNPJ )
![Page 13: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/13.jpg)
Mapeamento de Especializações
As especializações podem ser projetadas como:
Tabela única para toda hierarquia
o boa quando especializações não tem muitos atributos
Tabelas para entidade genérica e especializadas
o boa quando entidades genérica e especializadas
possuem muitos atributos e/ou relacionamentos
Tabelas somente para as entidades especializadas
o boa quando a entidade genérica possui poucos atributos
e relacionamentos, mas não aplicável em alguns casos
![Page 14: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/14.jpg)
Mapeamento de Especializações
Exercício 2: Como ficaria o mapeamento lógico?
![Page 15: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/15.jpg)
Mapeamento de Especializações
Exercício 3: Como ficaria o mapeamento lógico?
![Page 16: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/16.jpg)
Mapeamento de Relacionamentos
• O projeto lógico dos relacionamentos depende da
cardinalidade mínima e máxima
• Os relacionamentos podem ser projetadas como:
Fusão entre entidades relacionadas
oComum para cardinalidades menores
Adição de colunas para representar relacionamento
o Comum para relacionamentos opcionais
Nova tabela para relacionamento
o Comum para cardinalidades maiores
![Page 17: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/17.jpg)
Mapeamento Relacionamento 1:1
Relacionamento obrigatório em ambos os sentidos
Fusão de entidades
Eventos ( #código, nome, dataInstCom, nroCom, nomeCom )
![Page 18: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/18.jpg)
Mapeamento Relacionamento 1:1
Relacionamento opcional em um dos sentidos
Opção 1: fusão de entidades
Bibliotecárias ( #código, nome, [codArea],
[nomeArea], [periodicidade] )
![Page 19: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/19.jpg)
Mapeamento Relacionamento 1:1
Relacionamento opcional em um dos sentidos
Opção 2: uso de chave estrangeira em uma tabela
Bibliotecárias ( #código, nome )
Áreas ( #codArea, &codBiblio, nome, periodicidade )
![Page 20: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/20.jpg)
Mapeamento Relacionamento 1:1
Relacionamento opcional em ambos os sentidos
Opção 1: criar tabela para relacionamento
Pessoa ( #RG, nome ) [usada para esposa e marido]
Casamento ( #&RGM, #&RGE, regime )
(+) organização
(-) mais chaves
![Page 21: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/21.jpg)
Mapeamento Relacionamento 1:1
Relacionamento opcional em ambos os sentidos
Opção 2: uso de chaves estrangeiras na(s) tabela(s)
Pessoa ( #RG, nome, [&RGConjuge], [Regime] ) [usada para esposa e marido]
(+) simples
(-) atributos opcionais
![Page 22: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/22.jpg)
Mapeamento Relacionamento 1:N
Relacionamento obrigatório ou opcional no lado N
Uso de chaves estrangeiras no lado N
Editoras ( #código, nome )
Livros ( #ISBN, titulo, &codEditora, dataPublicacao )
![Page 23: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/23.jpg)
Mapeamento Relacionamento 1:N
Relacionamento opcional no lado 1
Opção 1: criar tabela para relacionamento com chave
da tabela do lado N
Estantes ( #número, capacidade )
Livros ( #ISBN, titulo)
Localizacao ( #&ISBN, &nroEstante, nroControle )
![Page 24: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/24.jpg)
Mapeamento Relacionamento 1:N
Relacionamento opcional no lado 1
Opção 2: criar chave estrangeira na tabela do lado N
Estantes ( #numero, capacidade )
Livros ( #ISBN, titulo, [&nroEstante], [nroControle] )
![Page 25: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/25.jpg)
Mapeamento Relacionamento 1:N
Exercício 4: Como ficaria o mapeamento lógico?
![Page 26: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/26.jpg)
Mapeamento de Entidades Fracas
Chave primária da entidade forte se torna chave
estrangeira na entidade fraca
Sócios (#matrícula, dataNascimento)
Dependentes (#&matrícula, #nroSequência, nome)
![Page 27: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/27.jpg)
Mapeamento de Entidades Fracas
Exercício 1: Como ficaria o mapeamento lógico?
![Page 28: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/28.jpg)
Mapeamento Relacionamento N:N
Relacionamento obrigatório ou opcional em
ambos os sentidos
Criar nova tabela usando as chaves dos dois lados
Livros ( #ISBN, titulo)
Compras ( #número, ordemCompra )
Pedido ( #&ISBN, #&nroCompra, quantidade )
![Page 29: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/29.jpg)
Mapeamento Relacionamento N:N
Relacionamento obrigatório ou opcional em
ambos os sentidos
Criar nova tabela usando as chaves dos dois lados
Livros ( #ISBN, titulo)
Compras ( #número, ordemCompra )
Pedido ( #idPed, &ISBN, &nroCompra, quantidade )
As vezes é melhor criar uma nova
chave primária para a nova tabela ao
invés de usar uma chave composta!
![Page 30: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/30.jpg)
Mapeamento Relacionamento com
Entidades Associativas
Solução varia de acordo com as cardinalidades
Livros ( #ISBN, ... ) Clientes ( #rg, ... )
Bibliotecárias ( #rg, ... )
Empréstimos ( #idEmp, &ISBN, &rgCliente, &rgBibli, data, [dtDev] )
![Page 31: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/31.jpg)
Mapeamento Relacionamento com
Entidades Associativas
Solução varia de acordo com as cardinalidades
Conta ( #número, &rgCliente, [&nroCartao], [dataExp] )
Cliente ( #rg, ... )
Solução 1:
![Page 32: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/32.jpg)
Mapeamento Relacionamento com
Entidades Associativas
Solução varia de acordo com as cardinalidades
Conta( #nroConta, #&rgCliente )
Cliente ( #rg, ... )
CartoesMagneticos ( #número, dataExp, &nroConta )
Solução 2:
![Page 33: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/33.jpg)
Mapeamento Relacionamento Ternários
Relacionamento N:N:N
Criar nova tabela para a relação com todas as chaves
Distribuidores ( #&cnpj, ... )
Produtos( #codigo, ... ) Cidades ( #codigo, ... )
Distribuição( #&cnpjDistr, #&codProd, #&codCidade, data )
![Page 34: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/34.jpg)
Mapeamento Relacionamento Ternários
Relacionamento 1:N:N
Criar nova tabela para a relação com todas as chaves,
sendo a chave do lado 1 apenas estrangeira
Pesquisadores ( #RG , ... ) Projetos( #número , ... )
Instituições ( #sigla, ... )
Pesquisa ( #&rgPesq, #&nroProj, &siglaInst, dataInicio )
![Page 35: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/35.jpg)
Mapeamento Relacionamento Ternários
Relacionamento 1:1:N
Entidade do lado N recebe chaves estrangeiras
Bairros ( #código, ... )
Carteiros ( #rg, ... )
Correspondências ( #código, peso, &rgCarteiro, &codBairro )
![Page 36: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/36.jpg)
Mapeamento Relacionamento Ternários
Relacionamento 1:1:1
Criar uma tabela única unificada
Veículo ( #numSérie, #numModelo, nomeModelo,
códigoCarroceria, obsCarroceria )
![Page 37: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/37.jpg)
Projeto Lógico
Exercício 5:
Mapear o
diagrama ER
ao lado em
um projeto
lógico.
![Page 38: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/38.jpg)
Dicionário de Dados
O modelo lógico deve se preocupar também em como
os dados serão representados, ou seja, a sua tipagem.
ALUNOS
Atributo Domínio Tamanho Restrição de
Integridade Descrição
matrícula Numérico Chave
primária Matrícula do aluno
nome Texto 50 Não nulo Nome do aluno
rg Numérico Chave
alternativa RG do aluno
cred Numérico Não nulo Quantidade de
créditos cursados
![Page 39: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/39.jpg)
Dicionário de Dados
Também pode ser produzido por software
FABForce → DBDesigner
No momento não vamos nos
preocupar com os tipos aceitos
pelos BD relacionais (cada SGBD
tem as suas peculiaridades)
http://fabforce.eu/downloads.php
https://dbdesigner.net/
![Page 40: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/40.jpg)
Projeto Lógico
Exercício 6: Faça o mapeamento lógico do seguinte diagrama ER e
escreva o dicionário de dados:
N
![Page 41: Banco de Dados I - buchinger.github.io · Projeto Lógico É um modelo baseado em regras Objetivos e Princípios: Bom desempenho Evitar junções de registros – ter os dados necessários](https://reader033.fdocumentos.tips/reader033/viewer/2022052922/5c1cf20009d3f2ef218ba683/html5/thumbnails/41.jpg)
Projeto Lógico
Exercício 7: Mapear o diagrama
ER ao lado em um projeto lógico
(não é necessário elaborar o
dicionário de dados)