Mapeamento ER->Relacional Fernanda Baião UNIRIO Material parcialmente extraído a partir das notas de aula de Maria Luiza M. Campos, Arnaldo Rocha e Maria Cláudia Cavalcanti Mapeamento do ER para Relacional Metodologia 1. Eliminação dos identificadores externos; 2. Eliminação de atributos compostos e multivalorados; 3. Tradução de cada entidade em uma relação; 4. Tradução de cada relacionamento : a. relacionamentos 1:n, 1:1 podem ser modelados pela adição de atributos às relações já existentes. b. relacionamentos n:m requerem uma relação separada 5. Tradução de Generalização/Especialização Eliminação de Identificadores Externos Transformá-los em identificadores internos no modelo relacional Universidade _Universidade Cidade Universidade _Universidade Cidade Matrícula Estudante _Universidade Número_Estudante _Estudante Estudante Número_Estudante _Estudante A chave da entidade externa foi importada para ESTUDANTE
Eliminação de Atributos Compostos Pessoa Endereço Rua CEP Estado Pessoa Rua CEP Estado Eliminação do nível intermediário Pessoa Endereço Detalhes são deixados para a aplicação Eliminação de Atributos Multivalorados - Entidades Produto _Produto s_de_materiais Preço Produto + Produto Material _Produto Preço _Produto _de_material Introdução de nova entidade. Uma para cada atributo multi-valorado. Eliminação de Atributos Multivalorados - Relacionamentos Instrutor (0,m) _Instrutor Departamento Telefone Instrutor (0,m) _Instrutor Departamento Telefone Oferece Número_Max_Estudantes Trimestre Oferece Número_Max_Estudantes (1,m) Curso Número_Curso Curso + Número_Curso Oferta_de_Cursos _Instrutor Número_Curso Trimestre
Tradução de Entidade Empregado CPF Salário Empregado (CPF,, Salário) 1:1 Cliente tem Carregamento _Cliente Endereço _Cliente Agrupando numa mesma relação CLIENTE_CARREGAMENTO (_Cliente,, Endereço) Ambas as entidades têm o mesmo identificador E se as entidades tiverem diferentes identificadores? 1:1 CLIENTE (0,1) CARTÃO_DE_ POSSUI CRÉDITO LIMITE_CRÉDITO NÚMERO_CARTÃO TIPO_CARTÃO CÓDIGO_CLIENTE Agrupando em relações distintas * Uma das entidades tem participação parcial CLIENTE (CÓDIGO_CLIENTE, ) CARTÃO_DE_CRÉDITO (TIPO_CARTÃO, NÚMERO_CARTÃO, LIMITE) POSSUI (TIPO_CARTÃO, NÚMERO_CARTÃO, CÓDIGO_CLIENTE) As entidades têm identificadores diferentes (Qual seria ainda outra alternativa neste caso?)
1:1 HOMEM DATA DURAÇÃO (0,1) (0,1) CASAMENTO MULHER MLH_CPF HOM_CPF Ambas as entidades têm * participação parcial HOMEM (HOM_CPF, ) MULHER (MLH_CPF, ) CASAMENTO (HOM_CPF, MLH_CPF, DATA, DURAÇÃO) 1:n CIDADE LOCALIZAÇÃO _CIDADE POPULAÇÃO Ambas entidades têm participação total ESTADO _ESTADO GOVERNADOR POPULAÇÃO CIDADE (_CIDADE, _ESTADO, POPULAÇÃO) ESTADO (_ESTADO, GOVERNADOR, POPULAÇÃO) VENDEDOR 1:n TELEFONE PREENCHE (0,1) PEDIDO DESCONTO NÚMERO_PEDIDO DATA VENDEDOR (_VEND, TELEFONE) participação parcial ( pedidos pela internet ) PEDIDO (NÚMERO_PEDIDO, DATA) PREENCHE (NÚMERO_PEDIDO, _VEND, DESCONTO)
n:m ESTUDANTE MATRÍCULA (1,m) CURSO NÚMERO_ESTUDANTE _ESTUDANTE SEMESTRE GRAU NÚMERO_CURSO _CURSO Independe das! cardinalidades ESTUDANTE (NÚMERO_ESTUDANTE, _ESTUDANTE) CURSO (NÚMERO_CURSO, _CURSO) MATRÍCULA (NÚMERO_ESTUDANTE, NÚMERO_CURSO, SEMESTRE, GRAU) n-ários COD_PEÇA PEÇA DESCRIÇÃO COD_FORN ENDEREÇO TELEFONE FORNECEDOR PROJETO COD_PROJETO DATA_ABERT QTDE PEÇA (COD_PEÇA, DESCRIÇÃO) FORNECEDOR (COD_FORN,, ENDEREÇO, TELEFONE) PROJETO (COD_PROJETO,, DATA_ABERT) FORNECIMENTO (COD_PEÇA, COD_FORNECEDOR, COD_PROJETO, QTDE) Tradução de Auto Relacionamentos REG_EMP DATA_NASC EMPREGADO É_COORDENADO É_COORDENADOR COORDENA EMPREGADO (REG_EMP,, DATA_NASC) COORDENA (REG_SUB, REG_COORDENADOR) E se o relacionamento for 1:n?
Tradução de Hierarquias Há duas alternativas Fundir todas as entidades em uma única relação Uma tabela para cada entidade específica Fusão Chave primária fica sendo a da entidade mais genérica Incluir uma coluna tipo Passar todos os atributos das entidades especializadas para entidade genérica Fazer o mesmo para os relacionamentos Aplicar as regras já conhecidas Traduzindo Hierarquias LOTACAO EMPREGADO DEPTO Codigo CREA SECRETARIA DOMINIO SW Habilitacao MOTORISTA PERTENCE RAMO ENGENH ENGENHEIRO PARTICIPACAO PROJETO Traduzindo Hierarquias - fusão CREA Habilitacao LOTACAO DEPTO Codigo tipo EMPREGADO DOMINIO PERTENCE PARTICIPACAO SW RAMO ENGENH PROJETO
Traduzindo Hierarquias fusão EMPREGADO(codEmp,, tipo, crea, habilitacao, codramo, coddepto) DEPTO (coddepto,, desc) SW (codsw,, desc) RAMOENG(codRamo,,desc) PROJETO (codproj,, desc) DOMINIO(codSW, codemp) PARTICIPACAO (codemp, codproj) Traduzindo Hierarquias - EMPREGADO(codEmp,, tipo, coddepto) MOTORISTA(codEmp, habilitacao) ENGENHEIRO (codemp, CREA, codramo) SECRETARIA (codemp) Note que codemp é chave primária em cada relação especializada e chave estrangeira para EMPREGADO Traduzindo Hierarquias Tabela única Todos os dados em uma única tabela... Não há necessidade de navegação por outras tabelas para se obter todos os dados a respeito de um empregado Economia de espaço por um lado pois a chave primária não é duplicada, mas há desperdício por outro lado com os nulos que os campos das tabelas especificas trazem Várias tabelas Conceitos explicitos em relações próprias Redução de nulos Há uma terceira alternativa? Cada caso é um caso!
s s simples e reduzidos Ex data de nascimento ---> datanasc nao usar o da tabela a não ser em campos parte de chaves primárias Ex:codigo ----> codemp Há controvérsias... Exercício dealer 12 entidades 13 relacionamentos projetista franchise entrega mes v_max configuração modelo (1,M) côr côr competidor carro carroceria mercado preço título num motor capacidade estilo Exercício dealer projetista franchise entrega mes v_max configuração modelo (1,M) côr côr competidor carro carroceria mercado preço título num motor capacidade estilo
Exercício dealer mes franchise modelo entrega mes modelo projetista modelo (M,N) côr modelo v_max modelo modelo competidor configuração preço carro carroceria título estilo mercado mercado nummotor nummotor estilo título num motor capacidade Exercício ESQUEMA FINAL: ENTREGA ( mes, modelo ) FRANCHISE ( dealer, mes, modelo ) MODELO ( modelo, projetista ) MODELO-CÔR ( modelo, cor ) CONFIGURAÇÃO ( modelo, motor, v_max ) CARROCERIA ( modelo, estilo, mercado ) MERCADO ( mercado, competidor ) MOTOR ( motor, capacidade ) CARRO ( modelo, estilo, motor, preço ) Referências e Reflexões Mapeamento de outros modelos para Relacional? De OO para relacional? De XML para Relacional? Site que fala sobre mapeamento objeto para relacional: http://www.servicearchitecture.com/object-relationalmapping/articles/