Projetos de Bancos de Dados
Relacionais
Álvaro Vinícius de Souza Coêlho
[email protected]
Bancos de Dados Relacionais
• Um conjunto de dados organizados em
Tabelas e estruturas auxiliares
– Tabelas: Linhas e Colunas
– Estruturas Auxiliares: Para acesso rápido a
dados: Clusters, Índices, Segmentos de
RollBack.
• As estruturas auxiliares são concebidas para
o melhor funcionamento do banco –
Administração (BDA)
Bancos de Dados Relacionais
• Projetando a estrutura de tabelas
• A partir do MER
• A princípio, deseja-se que toda entidade seja
uma tabela
– Atributos  Colunas
– Linhas  Instâncias
Bancos de Dados Relacionais
• Por exemplo, a entidade Aluno se torna uma
tabela da seguinte forma:
Aluno
Create Table Aluno (
-Matrícula
matricula char(11),
-Nome
nome varchar2(50),
-Endereço
endereçovarchar2(100)
)
Bancos de Dados Relacionais
• Tabelas, em geral, devem ter uma ou mais
colunas escolhidas como chave primária
– Chave Primária: Coluna cujo valor não pode se
repetir numa tabela, e que identifica unicamente
uma instância
– Não pode ser nulo
– Pode ser natural ou artificialmente construída
para o sistema
Bancos de Dados Relacionais
• Por exemplo, numa tabela Automóvel a
chave primária pode ser a coluna Placa ou
Renavan a depender da abordagem.
• Numa tabela de Matrículas, a identificação
de uma instância só poderá ser feita
sabendo-se o aluno e a turma em que ele
está matriculado
Bancos de Dados Relacionais
• Escolhida a chave primária de cada tabela,
alguns aspectos devem ser observado a
respeito dos relacionamentos:
– Relacionamentos 1 para 1 – Uma chave segue,
como única (alternativa) em outra tabela
– Relacionamentos 1 para N – Uma chave segue
para outra tabela
– Relacionamentos N para N – Uma nova tabela é
criada
Bancos de Dados Relacionais
• Relacionamentos 1 para 1
• Uma instância de uma entidade relaciona-se
a uma e somente uma instância de outra e a
recíproca é verdadeira
• Por exemplo: Cliente e Cônjuge
Bancos de Dados Relacionais
• Relacionamentos deste tipo são feitos com:
– Cópia da chave primária de uma tabela para a
outra (surge uma nova coluna dita chave
estrangeira)
– Restrição de Unicidade da Chave Estrangeira
Bancos de Dados Relacionais
• Note, no exemplo, que se a chave
estrangeira não for única (unique, em SQL)
a relação não é de 1 para 1
Matrícula
Nome
Cod
Máquina
Operador
P01
José
M01
Olivetti
P01
P02
Carlos
M02
Xerox
P03
P03
Maria
M03
HP
P02
P04
Éverton
M04
IBM
P04
Bancos de Dados Relacionais
• Obrigatoriedade: Deve-se permitir ou não
que a chave estrangeira seja nula a depender
da obrigatoriedade ou não da relação
Matrícula
Nome
Cod
Máquina
P01
José
M01
Olivetti
P02
Carlos
M02
Xerox
P03
Maria
M03
HP
P04
Éverton
M04
IBM
Operador
P03
P04
Bancos de Dados Relacionais
• Deve-se escolher como tabela mandatória
(que exporta a chave) a que possui maior
independência semântica
– O lado não-obrigatório da relação (se houver)
– A entidade menos dependente da outra, caso
contrário
Bancos de Dados Relacionais
• Relacionamentos 1 para N
• Uma instância de uma entidade se relaciona
com várias instâncias da outra, mas a
recíproca não é verdadeira
• Por exemplo Automóvel e Proprietário
Bancos de Dados Relacionais
• Relacionamentos deste tipo são feitos com:
– Cópia da chave primária de uma tabela para a
outra (surge uma nova coluna dita chave
estrangeira)
– Sem restrições de unicidade
Bancos de Dados Relacionais
• Note, no exemplo, que se a chave
estrangeira for única a relação não é de 1
para N
Matrícula
Professor
Cod
Disciplina
Professor
P01
Degas
D01
BD
P01
P02
Diego
D02
IA
P02
P03
Vânia
D03
LabBD
P01
D04
RecComp
P03
Bancos de Dados Relacionais
• Obrigatoriedade: Deve-se permitir ou não
que a chave estrangeira seja nula a depender
da obrigatoriedade ou não da relação
Matrícula
Professor
Cod
Disciplina
Professor
P01
Degas
D01
BD
P01
P02
Diego
D02
IA
P02
P03
Vânia
D03
LabBD
D04
RecComp
P03
Bancos de Dados Relacionais
• Observações gerais para relacionamentos 1
para 1 e 1 para N
– A tabela que exporta a chave nunca é
obrigatoriamente relacionada (a não ser via
programação)
– A tabela que recebe a chave estrangeira pode
ser dependente da relação se esta coluna for
obrigatória
Bancos de Dados Relacionais
• Relações de dependência ocorrem quando
– Uma instância de uma entidade é parte de outra,
e não tem sentido sem ela – Setor e Empresa
– Uma instância de uma entidade não pode existir
sem a ocorrência de outra – Automóvel e
Proprietário
– Boas modelagens especificam casos assim
Bancos de Dados Relacionais
• Relacionamentos N para N
• Uma instância de uma entidade se relaciona
com várias instâncias da outra, e a recíproca
é verdadeira
• Por exemplo Cliente e Conta
Bancos de Dados Relacionais
• Relacionamentos desse tipo são feitos com
– Criação de uma tabela (chamada tabelarelacionamento)
– Esta tabela recebe chaves estrangeiras das duas
entidades
– Restringindo-se a unicidade (chave primária) ao
par das chaves relacionadas (talvez com mais
alguma(s) coluna(s))
Bancos de Dados Relacionais
• Por exemplo:
Cod
Descrição
Pç
Forn
Cod
Descrição
P01
Biela
P01
F01
F01
GP Peças
P02
Virabrequim
P02
F02
F02
MM Motores
P03
Pistão
P03
F01
F03
KV Válvulas
P04
Mancal
P04
F02
P01
F02
P03
F02
P04
F01
Bancos de Dados Relacionais
• Relações mostradas:
– O fornecedor GP Peças fornece Biela, Pistão e Mancal
– O fornecedor MM Motores fornece Biela, Virabrequim,
Pistão e Mancal
– KV Válvulas não oferece nada
– Biela, Pistão e Mancal são ofertados por MM Motores e
GP Peças
– Virabrequim é ofertado apenas por MM Motores
Bancos de Dados Relacionais
• No exemplo anterior a chave primária da
tabela-relacionamento é composta pelas
duas chaves estrangeiras que ela recebe.
• Com efeito não há sentido registrar-se mais
de uma vez que MM Motores oferece Biela
Bancos de Dados Relacionais
• Em alguns casos, porém, é necessário que a
chave primária de tabelas deste tipo abranja
mais que as chaves estrangeiras:
Bancos de Dados Relacionais
• Exemplo:
Mat
Aluno
Mat
Disc
Nota
Sem
M01
José
M01
D01
4.5 00.1
M02
Maria
M02
D02
10.0 00.2
M03
Julio
M01
D01
7.2 01.2
M04
Esmeralda
M02
D03
9.0 01.1
Cod
Disciplina
M01
D02
7.0 00.2
D01
IA
M03
D01
4.5 01.2
D02
BD
M03
D03
5.0 02.1
D03
Redes
M02
D03
8.0 01.2
Bancos de Dados Relacionais
• A chave primária não pode ser o par (Mat,
Disc) porque ele pode se repetir até que o
aluno tenha uma nota maior ou igual a
cinco.
– Não pode igualmente ser a tripla (Mat, Disc,
Nota)
– Pode ser (Mat, Disc, Sem) ou as quatro colunas
(por considerações de performance)
Bancos de Dados Relacionais
• Atributos de Relacionamentos
– Muitas vezes os relacionamentos possuem
atributos
– Nos casos de relacionamentos 1 para 1 e 1 para
N os atributos devem seguir o caminho da
chave, e migrar para uma das tabelas
– Nos casos de relacionamentos N para N estes
ficarão alojados na tabela-relacionamento – e
possivelmente farão parte da chave primária
Bancos de Dados Relacionais
• Relacionamentos de Agregação
• Alguns relacionamentos especiais entre
entidades, chamados de Agregação ou
Todo-Parte, indicam que uma entidade é
parte de outra
– Por exemplo, no domínio do RH de uma
universidade, Professor e Departamento.
Bancos de Dados Relacionais
• Estes relacionamentos são modelados como
uma relação de 1 para N, sendo mandatória
(que exporta a chave) a tabela Todo.
– Professor tem uma coluna indicando o
departamento onde está alocado
Bancos de Dados Relacionais
• Caso se estabeleça uma relação de
dependência da parte com o todo (uma
classe não pode existir sem a outra) deve-se
exigir a obrigatoriedade da chave
estrangeira
– Ex: Vinho e Vinícola
Bancos de Dados Relacionais
• Relacionamentos de Generalização
• Muitas vezes as entidades se associam
formando uma relação de Generalização ou
Especialização (ou Supertipos e Subtipos)
• Neste caso há uma entidade que contém os
atributos que serão compartilhados pelas
demais
Bancos de Dados Relacionais
• Por Exemplo as entidades Automóvel,
Automóvel Passeio e Automóvel Utilitário
Automóvel
Automóvel
Passeio
Automóvel
Utilitário
Bancos de Dados Relacionais
• Neste exemplo, os atributos que
AutomóvelPasseio e AutomóvelUtilitário
têm em comum são colocados na entidade
Automóvel
• Cada subtipo fica com seus atributos
específicos
Bancos de Dados Relacionais
• Automóvel
– Ano, Fabricante, Placa
• AutomóvelPasseio
– NumPortas, ArCond(s/n)
• AutomóvelUtilitário
– PesoMaximo, VolMaximo
Bancos de Dados Relacionais
• Como se projeta?
• Duas alternativas
– Criar uma tabela com todos os atributos
• A identificação do tipo é feita com um flag
– Criar todas as tabelas e relacioná-las entre si
por chave estrangeira
Bancos de Dados Relacionais
• Uma única tabela
• Terá tantas colunas quantas forem
necessárias para mapear todos os atributos
• Uma coluna a mais identificará o sub-tipo
que de fato está sendo considerado
Bancos de Dados Relacionais
• No exemplo:
– Automóvel(Ano, Fabricante, Placa, NumPortas,
ArCond(s/n), PesoMaximo, VolMaximo,
Tipo(P,U))
– Tipo identifica se é de Passeio ou utilitário
• Se o tipo for P as colunas PesoMaximo, VolMaximo
devem ser nulas
• Se o tipo for U as colunas NumPortas, ArCond(s/n)
devem ser nulas
Bancos de Dados Relacionais
• Em SQL:
– Check(
(Tipo = ‘U’ and NumPortas is null
and ArCond is null) or
(Tipo = ‘P’ and PesoMaximo is
null and VolMaximo is null))
Bancos de Dados Relacionais
• Tabelas relacionadas
• Duas alternativas: Chave exportada do
supertipo para o subtipo ou o contrário
Bancos de Dados Relacionais
• Exportando a chave do supertipo para o
subtipo
• Cria-se uma tabela com colunas para todos
os atributos do supertipo
• Cria-se tabelas com colunas para todos os
atributos dos subtipos, acrescidas de uma
chave-estrangeira referenciando o Supertipo
Bancos de Dados Relacionais
• No exemplo:
– Automóvel(Ano, Fabricante, Placa)
– AutomóvelPasseio(NumPortas, ArCond(s/n),
Placa)
– AutomóvelUtilitário(PesoMaximo,
VolMaximo, Placa)
Bancos de Dados Relacionais
• Exportando a chave do subtipo para o supertipo
• Cria-se uma tabela com colunas para todos os
atributos do supertipo, mais tantas colunas quantos
forem os subtipos possíveis – serão chaves
estrangeiras
• Cria-se tabelas com colunas para todos os
atributos dos subtipos, acrescidas de uma chave
primária gerada pelo sistema
Bancos de Dados Relacionais
• No exemplo:
– Automóvel(Ano, Fabricante, Placa, AutPasseio,
AutUtilitário)
– AutomóvelPasseio(Cod, NumPortas,
ArCond(s/n), Placa)
– AutomóvelUtilitário(Cod, PesoMaximo,
VolMaximo, Placa)
Bancos de Dados Relacionais
• Observar que em Automóvel(Ano,
Fabricante, Placa, AutPasseio,
AutUtilitário) as chaves estrangeiras
AutPasseio e AutUtilitário são mutuamente
exclusivas – Quando uma tiver valor a outra
será nula e vice-versa)
Bancos de Dados Relacionais
• Em SQL:
– Check(
((AutPasseio is null and
AutUtilitario is not null) or
(AutPasseio is not null and
AutUtilitario is null))
Bancos de Dados Relacionais
• Resumindo, para se implementar a
generalização em Bancos de Dados
Relacionais há as seguintes opções:
Generalização
Uma Tabela
Várias Tabelas
Chave SuperTipo
Chave SubTipo
Projeto de BDs Relacionais
FIM!
Escher
“Não é que eu tenha medo de morrer. É que eu não
quero estar lá na hora que isso acontecer”
Woody Allen
Download

ProjBDRelacionais