Mapeamento ER para Relacional
// Do Conceitual ao Relacional
O mapeamento transforma o modelo ER (nível conceitual, ANSI/SPARC) em tabelas relacionais (nível interno), definindo tabelas, colunas, chaves primárias e estrangeiras (C.J. Date).
Objetivo: Criar um esquema relacional que respeite as regras de integridade (entidade e referencial).
-- Exemplo: Entidade forte mapeada CREATE TABLE projetos ( jid VARCHAR(10) PRIMARY KEY, jname VARCHAR(100) NOT NULL );
Como Identificar uma Entidade Forte
Em um sistema de gestão de projetos, uma entidade forte tem existência própria e não depende de outra para existir. Para encontrá-la:
- Olhe para o domínio principal: são objetos centrais do negócio (ex.: Projeto, Funcionário).
- Verifique se admite PK simples: a entidade forte terá sua própria chave primária (ex.:
ProjetoID
). - Não apareça dentro de relacionamentos apenas: ao contrário de entidades fracas, não existe somente como parte de uma associação.
Exemplo: Projeto
é entidade forte pois:
- Existe independentemente de qualquer outra (não precisa de outra tabela para sua identidade).
- Possui ProjetoID como chave primária única.
Projetos (JID, JNAME)
Mapeamento de Entidades
// Fortes e Fracas
Entidades Fortes
Viram tabelas com chaves primárias próprias (Regra de Integridade da Entidade).
Entidades Fracas
Viram tabelas com chave primária composta (chave do pai + identificador próprio).
- Ter participação total no relacionamento com o pai
- Sua PK deve incluir a PK da entidade forte
-- Entidade Forte: Projetos CREATE TABLE projetos ( jid VARCHAR(10) PRIMARY KEY, jname VARCHAR(100) ); -- Entidade Fraca: Tarefas CREATE TABLE tarefas ( tid VARCHAR(10), jid VARCHAR(10) REFERENCES projetos, tname VARCHAR(100), PRIMARY KEY (tid, jid) );
CREATE TABLE atribuicoes ( fid VARCHAR(10) REFERENCES funcionarios, tid VARCHAR(10), jid VARCHAR(10), PRIMARY KEY (fid, tid, jid), FOREIGN KEY (tid, jid) REFERENCES tarefas );
Mapeamento de Relacionamentos
// 1:1, 1:N, N:M
Tipos de Relacionamentos
- 1:1: Chave primária de uma tabela vira chave estrangeira na outra.
- 1:N: Chave primária do lado "1" é chave estrangeira no lado "N".
- N:M: Nova tabela associativa com chaves estrangeiras.
-- 1:1: Equipe-Líder (cada equipe tem exatamente 1 líder) CREATE TABLE equipes ( eid SERIAL PRIMARY KEY, nome VARCHAR(100), lider_id INT UNIQUE NOT NULL, FOREIGN KEY (lider_id) REFERENCES funcionarios(fid) );
-- 1:N: Projetos-Tarefas CREATE TABLE tarefas ( tid VARCHAR(10) PRIMARY KEY, tname VARCHAR(100), jid VARCHAR(10) REFERENCES projetos NOT NULL ); -- N:M: Funcionários-Equipes CREATE TABLE equipe_funcionarios ( eid VARCHAR(10) REFERENCES equipes, fid VARCHAR(10) REFERENCES funcionarios, PRIMARY KEY (eid, fid) );
CREATE TABLE projeto_funcionarios ( jid VARCHAR(10) REFERENCES projetos, fid VARCHAR(10) REFERENCES funcionarios, PRIMARY KEY (jid, fid) );
Atributos Multivalorados e Compostos
// Normalização de Atributos - Transformando em Tabelas Separadas
Atributos Multivalorados
Viram tabelas separadas com a chave primária da entidade original.
Atributos Compostos
São divididos em atributos simples (atomicidade, C.J. Date).
-- Atributo Multivalorado: Habilidades de Funcionários CREATE TABLE funcionario_habilidades ( fid VARCHAR(10) REFERENCES funcionarios, habilidade VARCHAR(50), PRIMARY KEY (fid, habilidade) ); -- Atributo Composto: Endereço de Projetos CREATE TABLE projetos ( jid VARCHAR(10) PRIMARY KEY, jname VARCHAR(100), endereco_rua VARCHAR(100), endereco_cidade VARCHAR(50) );
Atributos multivalorados (ex.: várias habilidades por funcionário) violam a atomicidade (C.J. Date). Eles são mapeados para uma tabela separada, com a chave primária da entidade original e o atributo multivalorado como colunas.
Resumo do Mapeamento
Elemento | Mapeamento |
---|---|
Atributo Multivalorado | Nova tabela com PK da entidade + atributo. |
Chave Primária | Composta (PK da entidade + atributo). |
Exemplo | Habilidades de Funcionários → Tabela `funcionario_habilidades`. |
Normalização em Atributos Multivalorados
Quando uma tabela possui um atributo multivalorado (vários valores em uma única célula), ela viola a 1ª Forma Normal (1FN). Para normalizar:
- Criar uma nova tabela apenas para o atributo multivalorado;
- Manter na nova tabela a chave primária original como campo estrangeiro junto com o atributo multivalorado;
- Definir uma chave primária composta unindo a PK original e o atributo multivalorado.
Dessa forma, cada valor passa a ter sua própria linha, respeitando a atomicidade exigida pela 1FN.
CREATE TABLE funcionario_telefones ( fid VARCHAR(10) REFERENCES funcionarios, telefone VARCHAR(20), PRIMARY KEY (fid, telefone) );
Generalização/Especialização
// Estratégias de Mapeamento
Generalização/Especialização: É um mecanismo de modelagem conceitual que agrupa entidades compartilhando características comuns em uma superclasse (generalização) e cria subclasses mais específicas para representar atributos ou comportamentos adicionais. Por exemplo, uma entidade Pessoa
pode ser generalizada, enquanto Cliente
e Fornecedor
são subclasses especializadas, herdando os atributos de Pessoa
(como nome, CPF) e acrescentando próprios (como limiteCredito para Cliente ou prazoEntrega para Fornecedor). Essa abordagem melhora a clareza do modelo, evita redundância e facilita a implementação de herança conceitual ao mapear para tabelas relacionais.
Estratégias
Estratégia | Descrição |
---|---|
Única Tabela | Todos os atributos em uma tabela, com tipo discriminador. |
Tabelas por Subclasse | Tabelas separadas para cada subclasse com chaves estrangeiras. |
Tabelas por Superclasse/Subclasse | Uma tabela para superclasse, tabelas para subclasses com FK. |
-- Única Tabela: Funcionários (Gerentes/Analistas) CREATE TABLE funcionarios ( fid VARCHAR(10) PRIMARY KEY, fname VARCHAR(100), tipo VARCHAR(20), bonus_gerente DECIMAL, especialidade_analista VARCHAR(50) );
CREATE TABLE gerentes ( fid VARCHAR(10) PRIMARY KEY, bonus DECIMAL, FOREIGN KEY (fid) REFERENCES funcionarios ); CREATE TABLE analistas ( fid VARCHAR(10) PRIMARY KEY, especialidade VARCHAR(50), FOREIGN KEY (fid) REFERENCES funcionarios );
Projeto: Mapeamento do Sistema de Gestão
// MER para Tabelas Relacionais
Regras de Mapeamento
Elemento | Mapeamento |
---|---|
Entidade Forte | Tabela com chave primária (ex.: SERIAL). |
Entidade Fraca | Tabela com PK composta (FK + identificador). |
Relacionamento 1:1 | FK com UNIQUE em uma tabela. |
Relacionamento 1:N | FK na tabela do lado "N". |
Relacionamento N:M | Tabela associativa com FKs compostas. |
Atributo Multivalorado | Nova tabela com PK da entidade + atributo. |
Atributo Composto | Divisão em colunas simples (atômicas). |
Generalização/Especialização | Tabela única ou tabelas por subclasse (opcional). |
Exemplo: Sistema de Gestão de Projetos
-- Diagrama ER (Crow’s Foot)
[Projetos]--1:N--[Tarefas]
JID (PK) || TID (PK)
JNAME || TNAME
|| JID (FK)
[Funcionários]--N:M--[Equipes]
FID (PK) EID (PK)
FNAME ENAME
[Equipe]--1:1--[Líder]
EID (PK) FID (PK)
-- DDL Resultante
CREATE TABLE projetos (
jid SERIAL PRIMARY KEY,
jname VARCHAR(100),
datainicio DATE
);
CREATE TABLE tarefas (
tid SERIAL,
jid INT,
tname TEXT,
PRIMARY KEY (tid, jid),
FOREIGN KEY (jid) REFERENCES projetos(jid)
);
CREATE TABLE funcionarios (
fid SERIAL PRIMARY KEY,
fname VARCHAR(100)
);
CREATE TABLE equipes (
eid SERIAL PRIMARY KEY,
ename VARCHAR(100),
liderid INT UNIQUE,
FOREIGN KEY (liderid) REFERENCES funcionarios(fid)
);
CREATE TABLE equipe_funcionarios (
eid INT REFERENCES equipes(eid),
fid INT REFERENCES funcionarios(fid),
PRIMARY KEY (eid, fid)
);
Converta o diagrama ER do sistema de gestão de projetos (Aula 4/5) em tabelas relacionais. Siga os passos:
- Liste as tabelas resultantes.
- Defina chaves primárias e estrangeiras.
- Escolha tipos de dados (ex.: SERIAL, VARCHAR, DATE).
- Escreva comandos
CREATE TABLE
eALTER TABLE
.
Tabelas: - projetos (JID SERIAL, JNAME VARCHAR, DATAINICIO DATE) - tarefas (TID SERIAL, JID INT, TNAME TEXT, PK: TID, JID) - funcionarios (FID SERIAL, FNAME VARCHAR) - equipes (EID SERIAL, ENAME VARCHAR, LIDERID INT UNIQUE) - equipe_funcionarios (EID INT, FID INT, PK: EID, FID)
Quiz Interativo
// Teste suas habilidades de mapeamento
Teste de Conhecimento
Responda às perguntas para consolidar o aprendizado sobre mapeamento ER para relacional.
1. Como uma entidade forte é mapeada?
2. O que caracteriza a chave primária de uma entidade fraca?
3. Como mapear um relacionamento N:M?
4. Como tratar atributos multivalorados?
5. Qual estratégia de generalização usa uma tabela única?
RUN mapping_quiz_check; -- Quiz finalizado. Parabéns pelo mapeamento!