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