Projetos de Bancos de Dados Relacionais
Álvaro Vinícius de Souza Coê[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-Matrícula-Nome-Endereço
Create Table Aluno (matricula char(11),nome varchar2(50),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 NomeP01 JoséP02 CarlosP03 MariaP04 Éverton
Cod Máquina OperadorM01 Olivetti P01M02 Xerox P03
M03 HP P02M04 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 NomeP01 JoséP02 CarlosP03 MariaP04 Éverton
Cod Máquina OperadorM01 OlivettiM02 Xerox P03
M03 HPM04 IBM 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 ProfessorP01 DegasP02 DiegoP03 Vânia
Cod Disciplina ProfessorD01 BD P01D02 IA P02
D03 LabBD P01D04 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 ProfessorP01 DegasP02 DiegoP03 Vânia
Cod Disciplina ProfessorD01 BD P01D02 IA P02
D03 LabBDD04 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 tabela-
relacionamento)– 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çãoP01 BielaP02 VirabrequimP03 PistãoP04 Mancal
Cod DescriçãoF01 GP PeçasF02 MM MotoresF03 KV Válvulas
Pç FornP01 F01P02 F02P03 F01P04 F02P01 F02P03 F02P04 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 AlunoM01 JoséM02 MariaM03 JulioM04 Esmeralda
Cod DisciplinaD01 IAD02 BDD03 Redes
Mat Disc Nota SemM01 D01 4.5 00.1M02 D02 10.0 00.2M01 D01 7.2 01.2M02 D03 9.0 01.1M01 D02 7.0 00.2M03 D01 4.5 01.2M03 D03 5.0 02.1M02 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 Passeio
Automóvel Utilitário
Automóvel
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:
Uma Tabela Várias Tabelas
Generalização
Chave SuperTipo Chave SubTipo
Projeto de BDs Relacionais
FIM!
“Não é que eu tenha medo de morrer. É que eu não quero estar lá na hora que isso acontecer”
Woody AllenEscher
Top Related