Baixe o app para aproveitar ainda mais
Prévia do material em texto
Transformações entre modelos Engenharia reversa de BD relacional Projeto lógico de BD relacional Modelo ER (nível conceitual) Modelo relacional (nível lógico) Projeto Lógico • Transformação de um modelo ER (mais abstrato) para o modelo relacional (de mais detalhes). • Não existe uma única forma correta: um DER pode gerar diferentes modelos relacionais. Diferentes modelos do mesmo DER: • Performances distintas. • Facilidade ou dificuldade no desenvolvimento e manutenção. Princípios das regras de tradução Principais objetivos: • Boa performance. • Desenvolvimento e manutenção facilitado. Principais princípios: • Evitar junções. • Diminuir o número de chaves. • Evitar campos opcionais. Junções • Junção: Busca de dados de diversas linhas associadas por igualdades de campos. • Acessos a disco consomem a maior parte do tempo na execução de uma instrução. • Dados de uma linha: geralmente armazenados juntos físicamente. • Dados necessários em uma única tabela: apenas um acesso a disco será necessário. • Consultas em tabelas diferentes: junções necessárias e com isso vários acessos a disco. Índices • Estrutura auxiliar que permite ao SGBD checar rapidamente a existência de um valor de uma chave. • Para cada chave é necessário definir um índice. Permite de forma eficiente controlar: • A unicidade de chaves primária e alternativa. • Integridade referêncial para chaves estrangeiras. • Ocupam espaço considerável em disco. • Inserções ou remoções podem exigir vários acessos a disco. Passos de transformação ER para relacional • Conversão inicial de entidades e seus atributos • Conversão de relacionamentos e seus atributos • Conversão de generalização\especialização e seus atributos Conversão inicial de entidades • Cada entidade é traduzida em uma tabela. • Cada atributo define uma coluna da tabela. • Atributos identificadores definem a chave primária. PESSOA Codigo Nome Endereço Pessoa (CodigoPess, Nome, Endereço, DataNasc, DataAdm) DataNasc DataAdm Entidades com relacionamento identificador Para cada entidade fraca cria-se uma tabela com: • Chave estrangeira que faz referência à chave primária da entidade forte. • Seus próprios atributos. • Chave primária composta de: chave estrangeira da entidade forte e seus próprios atributos identificadores. EMPREGADO (1, 1) (0, n) nomecodigo nomen° sequência DEPENDENTE Dependente(CodigoEmp, NumSeq, Nome) Entidades com relacionamento identificador • Exemplo: entidade forte em um relacionamento também tem um relacionamento identificador. FILIAL (1,1) (0,n) (0,n) (1,1) codigo n° empresa n° filial EMPRESA GRUPO nome nome nome Grupo (CodGrup, Nome) Empresa (CodGrup, NoEmpresa, Nome) CodGrup referencia Grupo(CodGrup) Filial (CodGrup, NoEmpresa, NoFilial, Nome) CodGrup referencia Grupo(CodGrup) NoEmpresa referencia Empresa(NoEmpresa) Implementação de relacionamentos Três alternativas básicas: • Fusão de tabelas de entidades • Adição de colunas • Tabela própria Fusão de tabelas de entidades • Consta em implementar uma única tabela com os atributos do relacionamento e as entidades participantes. • Possível apenas em relacionamentos 1:1. CONFERÊNCIA ORGANIZAÇÃO (1, 1) (1, 1) Conferencia (CodConf, Nome, DataInstOrg, Ender) CONFERÊNCIA Código Nome Data Instação Ender Adição de colunas • Consta em adicionar em uma tabela uma chave estrangeira que faz referência à chave da outra entidade do relacionamento. • Possível se uma das entidades tem cardinalidade máxima 1. DEPARTAMENTO LOTAÇÃO (1, 1) (0, 1) Departamento(Codigo, Nome) Empregado (CodEmp, Nome, CodDept, DataLota) CodDept referencia Departamento(Codigo) EMPREGADO Código Nome Data lotação NomeCódigo Tabela própria • Implementação de uma tabela para o relacionamento contendo chaves estrangeiras referenciando as chaves primárias das entidades do relacionamento. ENGENHEIRO ALOCAÇÃO (0, n) (0, n) PROJETO Código Nome Função TituloCódigo Engenheiro (CodEng, Nome) Projeto (CodProj, Título) Atuação (CodEng, CodProj, Função) CodEng referencia Engenheiro CodProj referencia Projeto Vantagens Fusão de tabelas: • Diminui o número de chaves além da necessidade de realizar junções. • Melhor alternativa quando possível. Adição de colunas: • Alternativa preferida quando for inviável fusão de tabelas. • Menor número de junções necessárias e chaves se comparado com a implementação por tabela própria. Vantagens Tabela própria: • Possível independente da cardinalidade. • Única alternativa para relacionamentos n:n. Relacionamentos 1:1 • Alternativa preferida é a fusão de tabelas (quando possível). • Adição de colunas é recomendada quando não for possível a fusão de tabelas. • Implementação por tabela prórpia não é indicada. Dois casos: I. Ambas as entidades tem cardinalidade mínima opcional. II. Demais combinações. Relacionamentos 1:1 (ambas opcionais) • Fusão de tabelas inviável. • Alternativa preferida é adição de colunas. MARIDO CASAMENTO (1, 1) (1, 1) ESPOSA Identidade Nome Data NomeIdentidadeRegime Mulher (IdM, Nome, IdM, Data, Regime) IdM referencia Homem Homem (IdH, Nome) Se tentássemos por fusão de tabelas: Casamento (IdM, IdH, NomeM, nomeH, Data, Regime) Qual seria a chave primária? Relacionamentos 1:1 (demais casos) • Alternativa preferida: fusão de colunas CORRENTISTA (1, 1) (0, 1) CARTÃO MAGNETICO Codigo Nome Data Exp.Codigo Correntista (CodCorrent, Nome, CodCartao, DataExp) Relacionamentos 1:1 (0,1) (0,1) Tabela Própria Adição de coluna Fusão de tabelas 3 1 X 3 2 1 3 2 1 (0,1) (1,1) (1,1) (1,1) 1 - Melhor alternativa 2 - Intermediária 3 - Pior alternativa X - Inviável Relacionamentos 1:n • Alternativa preferida é a adição de colunas. • Não é possível por fusão de tabelas. • Tabela própria é possível (não indicada). EDIFICIO (1, 1) (1, n) Edificio (CodEd, Endereço) Apartamento (CodEd, Num, Area) CodEd referencia Edificio APARTAMENTO Código Endereço AreaNumero Relacionamentos 1:n (0,1) (0,n) Tabela Própria Adição de coluna Fusão de tabelas 2 1 X 2 1 X 3 1 X 3 1 X (0,1) (1,n) (1,1) (0,n) (1,1) (1,n) 1 - Melhor alternativa 2 - Intermediária 3 - Pior alternativa X - Inviável Relacionamentos n:n • Implementados unicamente por tabela própria. • Não é possível por fusão de tabelas. • Para ser possível de implementar por adição de colunas seria necessária uma coluna multivalorada. MEDICO CONSULTA (0, n) (0, n) PACIENTE CRM Nome Data/hora NomeRG Medico (CRM, Nome) Paciente (RG, Nome) Consulta (CRM, RG, Data/hora) CRM referencia Medico RG referencia Paciente Relacionamentos n:n (0,n) (0,n) Tabela Própria Adição de coluna Fusão de tabelas 1 X X 1 X X 1 X X (0,n) (1,n) (1,n) (1,n) 1 - Melhor alternativa 2 - Intermediária 3 - Pior alternativa X - Inviável Relacionamentos de grau maior que 2 • Sem regras específicas. Pode se fazer da seguinte forma: • Transformar o relacionamento em uma entidade. • Ligar por um relacionamento binário as entidades que participavam do relacionamento original. Relacionamentos de grau maior que 2 CIDADE DISTRIBUIDOR DISTRIBUIÇÃO PRODUTO Codigo Nome Codigo Nome Codigo Nome (0, n) (0, 1) (0, n) Relacionamentos de grau maior que 2 CIDADE DISTRIBUIDOR PRODUTO Codigo Nome Codigo Nome Codigo Nome DISTRIBUIÇÃO (1, 1) (1, 1) (1, 1) (0, n) (0, n)(0, n) Produto (CodProd, Nome) Cidade (CodCid, Nome) Distribuidor (CodDistr, Nome) Distribuição (CodProd, CodCid, CodDistr) CodProd referencia Produto CodCid referencia Cidade CodDistr referencia Distribuidor Generalização/especialização Duas alternativas principais: • Uma tabela para toda hierarquia. • Uma tabela para cada entidade. Uma tabela por hierarquia • É criada uma única tabela para a entidade genérica e entidades especializadas. A tabela irá conter: I. A chave primária e atributos da entidade genérica. II. Um atributo tipo (da especialização). III. Atributos das entidades especializadas. IV. Atributos de relacionamentosda entidade genérica e das especializadas. Exemplo DEPARTAMENTOEMPREGADO SECRETARIA MOTORISTA ENGENHEIRO PROCESSADOR DE TEXTOS PROJETO RAMO DA ENGENHARIA LOTAÇÃO Codigo Nome Codigo Nome Codigo Nome Carteira de habilitação CREA DOMINIO PARTICIPAÇÃO Codigo NomeCodigo px Nome Tipo (1,1)(0,n) (1,n) (0,n) (0,n) (1,1) (0,n) (0,n) Uma tabela por hierarquia DEPARTAMENTOEMPREGADO LOTAÇÃO Codigo NomeCodigo Nome Tipo Atributos da entidade genérica: Empregado (CodEmp, Nome, Tipo) Atributos da referentes a relacionamentos: Empregado (CodEmp, Nome, Tipo, CodDept) CodDept referencia Departamento Departamento (CodDept, Nome) Uma tabela por hierarquia Atributos das entidades especializadas: Empregado (CodEmp, Nome, Tipo, CodDept, CarteiraHab, CREA) SECRETARIA MOTORISTA ENGENHEIRO Carteira de habilitação CREA px Uma tabela por hierarquia Atributos de relacionamentos das entidades especializadas: Empregado (CodEmp, Nome, Tipo, CodDept, CarteiraHab, CREA, CodRamo) CodRamo referencia RamoEng RamoEng (CodRamo, Nome) SECRETARIA ENGENHEIRO PROCESSADOR DE TEXTOS PROJETO RAMO DA ENGENHARIA Codigo Nome Codigo Nome Codigo Nome CREA DOMINIO PARTICIPAÇÃO px (1,n) (0,n) (0,n) (1,1) (0,n) (0,n) Uma tabela por hierarquia Esquema completo: Departamento (CodDept, Nome) ProcessText (CodProc, Nome) RamoEng (CodRamo, Nome) Projeto (CodProj, Nome) Empregado (CodEmp, Nome, Tipo, CodDept, Carteira, CREA, CodRamo) CodDept referencia Departamento CodRamo referencia RamoEng Domínio (CodEmp, CodProc) CodEmp referencia Empregado CodProc referencia ProcessText Participa (CodEmp, CodProj) CodEmp referencia Empregado CodProj referencia Projeto Uma tabela por entidade • Consiste de criar uma tabela para cada entidade da hierarquia. • A chave primária de cada entidade especializada será também uma chave estrangeira para a entidade genérica. I. Criar para cada entidade uma tabela com seus atributos e respectivos relacionamentos além da coluna tipo. II. Para cada entidade especializada a chave primária será uma chave estrangeira referenciando a entidade genérica. Exemplo DEPARTAMENTOEMPREGADO SECRETARIA MOTORISTA ENGENHEIRO PROCESSADOR DE TEXTOS PROJETO RAMO DA ENGENHARIA LOTAÇÃO Codigo Nome Codigo Nome Codigo Nome Carteira de habilitação CREA DOMINIO PARTICIPAÇÃO Codigo NomeCodigo px Nome Tipo (1,1)(0,n) (1,n) (0,n) (0,n) (1,1) (0,n) (0,n) Uma tabela por entidade Esquema completo: Empregado (CodEmp, Nome, Tipo, CodDept) CodDept referencia Departamento Motorista (CodEmp, CarteiraHab) CodEmp referencia Empregado Engenheiro (CodEmp, CREA, CodRamo) CodEmp referencia Empregado CodRamo referencia RamoEng Departamento (CodDept, Nome) RamoEng (CodRamo, Nome) ProcessText (CodProc, Nome) Projeto (CodProj, Nome) Dominio (CodEmp, CodProc) CodEmp referencia Empregado CodProc referencia ProcessText Participa (CodEmp, CodProj) CodEmp referencia Empregado CodProj referencia Projeto Vantagens Uma tabela por hierarquia: • Todos os dados em uma única linha (sem necessidade de junções). • Chave primária armazenada uma única vez. Uma tabela por entidade: • Colunas opcionais que occorem devido atributos que podem ser vazios do ponto de vista da aplicação, na outra alternativa as colunas opcionais dependem também do tipo de especialização. Referências • Sistemas de Banco de Dados, Elmasri, Ranmez e Navathe, Shamkant B., Pearson, 6ª edição. • Projeto de Banco de Dados, Carlos Alberto Heuser, Bookman - 6. ed
Compartilhar