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.
2.
3.
4.
Eliminação dos identificadores externos;
Eliminação de atributos compostos e multivalorados;
Tradução de cada entidade em uma relação;
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
Código_Universidade
Nome
Cidade
Universidade
Código_Universidade
Nome
Cidade
Código_Universidade
Estudante
Matrícula
Estudante
Número_Estudante
Nome_Estudante
Idade
Número_Estudante
Nome_Estudante
Idade
A chave da entidade externa
foi importada para ESTUDANTE
Eliminação de Atributos
Compostos
Pessoa
Nome
Idade
Endereço
Pessoa
Pessoa
Rua
CEP
Estado
Nome
Idade
Rua
CEP
Estado
Nome
Idade
Endereço
Eliminação do nível
intermediário
Detalhes são deixados para
a aplicação
Eliminação de Atributos
Multivalorados - Entidades
Produto
Produto
Código_Produto
Códigos_de_Materiais (1,n)
Descrição
Preço
Código_Produto
Descrição
Preço
Introdução de nova entidade.
Uma para cada atributo
multi-valorado.
+
Produto__Material
Código_Produto
Código_de_Material
Eliminação de Atributos
Multivalorados - Relacionamentos
Instrutor
Código_Instrutor
Departamento
Telefone
Instrutor
(0,m)
(0,m)
Oferece
Oferece
Código_Instrutor
Departamento
Telefone
Número_Max_Estudantes
Número_Max_Estudantes
Trimestre (1,n)
(1,m)
Curso
(1,n)
Número_Curso
Número_Curso
Curso
+
Oferta_de_Cursos
Código_Instrutor
Número_Curso
Trimestre
Tradução de Entidade
CPF
Nome
Salário
Empregado
Empregado (CPF, Nome, Salário)
Tradução de Relacionamentos
1:1
(1,1)
Cliente
(1,1)
tem
Nome
Código_Cliente
Carregamento
Endereço
Código_Cliente
Agrupando numa mesma relação
CLIENTE_CARREGAMENTO (Código_Cliente, Nome, Endereço)
Ambas as entidades têm o mesmo identificador
E se as entidades tiverem diferentes identificadores?
Tradução de Relacionamentos
1:1
(0,1)
CLIENTE
POSSUI
(1,1)
LIMITE_CRÉDITO
CARTÃO_DE_
NÚMERO_CARTÃO
CRÉDITO
TIPO_CARTÃO
NOME
CÓDIGO_CLIENTE
Agrupando em relações distintas
*Uma
das entidades tem
participação parcial
CLIENTE (CÓDIGO_CLIENTE, NOME)
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?)
Tradução de Relacionamentos
1:1
DATA
DURAÇÃO
(0,1)
HOMEM
HOM_CPF
CASAMENTO
(0,1)
MLH_CPF
MULHER
NOME
NOME
*
Ambas as entidades têm
participação parcial
HOMEM (HOM_CPF, NOME)
MULHER (MLH_CPF, NOME)
CASAMENTO (HOM_CPF, MLH_CPF, DATA, DURAÇÃO)
Tradução de Relacionamentos
1:n
NOME_CIDADE
CIDADE
POPULAÇÃO
(1,1)
Ambas entidades têm
participação total
LOCALIZAÇÃO
(1,n)
ESTADO
NOME_ESTADO
GOVERNADOR
POPULAÇÃO
CIDADE (NOME_CIDADE, NOME_ESTADO, POPULAÇÃO)
ESTADO (NOME_ESTADO, GOVERNADOR, POPULAÇÃO)
Tradução de Relacionamentos
1:n
VENDEDOR
NOME
TELEFONE
(1,n)
DESCONTO
PREENCHE
participação parcial
(“pedidos pela internet”)
(0,1)
PEDIDO
NÚMERO_PEDIDO
DATA
VENDEDOR (NOME_VEND, TELEFONE)
PEDIDO (NÚMERO_PEDIDO, DATA)
PREENCHE (NÚMERO_PEDIDO, NOME_VEND, DESCONTO)
Tradução de Relacionamentos
NÚMERO_ESTUDANTE
n:m
ESTUDANTE
NOME_ESTUDANTE
(1,n)
Independe
SEMESTRE
MATRÍCULA
das
!
cardinalidades
GRAU
(1,m)
CURSO
NÚMERO_CURSO
NOME_CURSO
ESTUDANTE (NÚMERO_ESTUDANTE, NOME_ESTUDANTE)
CURSO (NÚMERO_CURSO, NOME_CURSO)
MATRÍCULA (NÚMERO_ESTUDANTE, NÚMERO_CURSO, SEMESTRE, GRAU)
Tradução de Relacionamentos
n-ários
COD_PEÇA
PEÇA
DESCRIÇÃO
(1,n)
COD_FORN
NOME
ENDEREÇO
TELEFONE
PROJETO
FORNECEDOR
(1,n)
(1,n)
COD_PROJETO
NOME
DATA_ABERT
QTDE
PEÇA (COD_PEÇA, DESCRIÇÃO)
FORNECEDOR (COD_FORN, NOME, ENDEREÇO, TELEFONE)
PROJETO (COD_PROJETO, NOME, DATA_ABERT)
FORNECIMENTO (COD_PEÇA, COD_FORNECEDOR, COD_PROJETO, QTDE)
Tradução de Auto
Relacionamentos
REG_EMP
NOME
DATA_NASC
EMPREGADO
(1,n)
É_COORDENADO
(1,n)
É_COORDENADOR
COORDENA
EMPREGADO (REG_EMP, NOME, 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
(1,1)
(0,n)
Código
Descrição
nome
DEPTO
Codigo
nome
EMPREGADO
CREA
(0,n)
ENGENHEIRO
MOTORISTA
SECRETARIA
(1,n)
DOMINIO
(0,n)
Habilitacao
PERTENCE
(0,n)
(1,1)
Código
Descrição
nome
SW
PARTICIPACAO
RAMO
ENGENH
(0,n)
Código
Descrição
nome
PROJETO
Traduzindo Hierarquias fusão
(1,1)
LOTACAO
CREA
Habilitacao
DEPTO
Código
Descrição
nome
Codigo
nome
tipo
(0,n)
EMPREGADO
(0,n)
(1,n)
(0,n)
DOMINIO
PERTENCE
(0,n)
SW
PARTICIPACAO
(1,1)
Código
Descrição
nome
RAMO
ENGENH
(0,n)
Código
Descrição
nome
PROJETO
Código
Descrição
nome
Código
Descrição
nome
Traduzindo Hierarquias –
fusão
EMPREGADO(codEmp, nome, tipo, crea, habilitacao, codRamo, codDepto)
DEPTO (codDepto, nome, desc)
SW (codSW, nome, desc)
RAMOENG(codRamo, nome,desc)
PROJETO (codProj, nome, desc)
DOMINIO(codSW, codEmp)
PARTICIPACAO (codEmp, codProj)
Traduzindo Hierarquias EMPREGADO(codEmp, nome, 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!
Nomes
Nomes simples e reduzidos
Ex data de nascimento ---> dataNasc
nao usar o nome da tabela
a não ser em campos parte de chaves primárias
Ex:codigo ----> codEmp
Há controvérsias... ☺
Exercício
nome
dealer
12 entidades
13 relacionamentos
(1,N)
nome
(1,1)
projetista
(1,1)
(1,N)
(1,N)
(1,1)
(1,M)
(1,N)
(1,N)
(1,1)
(1,1)
(1,N)
franchise
(1,1)
(1,N)
entrega
mes
côr
côr
nome
(1,N)
(1,1)
modelo
(1,N)
competidor
(1,1)
v_max
configuração
(1,1)
(1,N)
carro
(1,1)
(1,N)
carroceria
mercado
(1,1)
(1,1)
preço
título
(1,N)
(1,N)
num
motor
capacidade
nome
estilo
Exercício
nome
dealer
(1,N)
nome
(1,1)
projetista
franchise
(1,1)
(1,N)
(1,1)
(1,N)
(1,N)
(1,1)
(1,M)
(1,N)
(1,N)
(1,1)
entrega
mes
côr
côr
(1,N)
(1,1)
modelo
(1,N)
nome
competidor
(1,1) v_max
(1,1)
configuração
carro
(1,N)
(1,1)
carroceria
(1,1)
(1,1)
preço
título
(1,N)
motor
mercado
(1,N)
(1,1)
num
(1,N)
(1,N)
capacidade
nome
estilo
Exercício
nomedealer
mes
franchise
mes
entrega
nomemodelo
nomemodelo
nome
(M,N)
nomeprojetista
nomemodelo
preço
nummotor
num
motor
côr
carro
competidor
nomemodelo
nomemodelo
v_max
configuração
modelo
Nome
estilo
nummotor
carroceria
título
mercado
nomeestilo
mercado
título
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/
Download

2 - Mapeamento ER Relacional