Projetos de Bancos de Dados Relacionais lvaro Vincius
Projetos de Bancos de Dados Relacionais Álvaro Vinícius de Souza Coêlho alvaro. degas@terra. com. br
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 Roll. Back. • 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 varchar 2(50), -Endereço endereçovarchar 2(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 P 01 José M 01 Olivetti P 01 P 02 Carlos M 02 Xerox P 03 Maria M 03 HP P 02 P 04 Éverton M 04 IBM P 04
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 P 01 José M 01 Olivetti P 02 Carlos M 02 Xerox P 03 Maria M 03 HP P 04 Éverton M 04 IBM Operador P 03 P 04
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 P 01 Degas D 01 BD P 01 P 02 Diego D 02 IA P 02 P 03 Vânia D 03 Lab. BD P 01 D 04 Rec. Comp P 03
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 P 01 Degas D 01 BD P 01 P 02 Diego D 02 IA P 02 P 03 Vânia D 03 Lab. BD D 04 Rec. Comp P 03
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 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 P 01 Biela P 01 F 01 GP Peças P 02 Virabrequim P 02 F 02 MM Motores P 03 Pistão P 03 F 01 F 03 KV Válvulas P 04 Mancal P 04 F 02 P 01 F 02 P 03 F 02 P 04 F 01
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 M 01 José M 01 D 01 4. 5 00. 1 M 02 Maria M 02 D 02 10. 0 00. 2 M 03 Julio M 01 D 01 7. 2 01. 2 M 04 Esmeralda M 02 D 03 9. 0 01. 1 Cod Disciplina M 01 D 02 7. 0 00. 2 D 01 IA M 03 D 01 4. 5 01. 2 D 02 BD M 03 D 03 5. 0 02. 1 D 03 Redes M 02 D 03 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
Bancos de Dados Relacionais • Neste exemplo, os atributos que Automóvel. Passeio e Automóvel. Utilitá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óvel. Passeio – Num. Portas, Ar. Cond(s/n) • Automóvel. Utilitário – Peso. Maximo, Vol. Maximo
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, Num. Portas, Ar. Cond(s/n), Peso. Maximo, Vol. Maximo, Tipo(P, U)) – Tipo identifica se é de Passeio ou utilitário • Se o tipo for P as colunas Peso. Maximo, Vol. Maximo devem ser nulas • Se o tipo for U as colunas Num. Portas, Ar. Cond(s/n) devem ser nulas
Bancos de Dados Relacionais • Em SQL: – Check( (Tipo = ‘U’ and Num. Portas is null and Ar. Cond is null) or (Tipo = ‘P’ and Peso. Maximo is null and Vol. Maximo 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óvel. Passeio(Num. Portas, Ar. Cond(s/n), Placa) – Automóvel. Utilitário(Peso. Maximo, Vol. Maximo, 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, Aut. Passeio, Aut. Utilitário) – Automóvel. Passeio(Cod, Num. Portas, Ar. Cond(s/n), Placa) – Automóvel. Utilitário(Cod, Peso. Maximo, Vol. Maximo, Placa)
Bancos de Dados Relacionais • Observar que em Automóvel(Ano, Fabricante, Placa, Aut. Passeio, Aut. Utilitário) as chaves estrangeiras Aut. Passeio e Aut. Utilitário são mutuamente exclusivas – Quando uma tiver valor a outra será nula e vice-versa)
Bancos de Dados Relacionais • Em SQL: – Check( ((Aut. Passeio is null and Aut. Utilitario is not null) or (Aut. Passeio is not null and Aut. Utilitario 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 Super. Tipo Chave Sub. Tipo
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
- Slides: 47