Modelo Entidade-Relacionamento: A Base da Modelagem
// Introdução ao MER
O Modelo Entidade-Relacionamento (MER) é uma técnica de modelagem conceitual que representa a realidade de forma abstrata, antes de seu mapeamento para um modelo relacional (C.J. Date). Ele permite projetar bancos de dados com independência do SGBD.
Baseia-se em entidades (objetos distinguíveis), seus atributos (propriedades), e os relacionamentos entre eles.
-- Exemplo: Entidade Fornecedores no MER CREATE TABLE fornecedores ( sid VARCHAR(10) PRIMARY KEY, sname VARCHAR(100) NOT NULL, cidade VARCHAR(50) );
Fornecedores, Peças, Projetos
Entidades: Os Blocos do MER
// Fortes e Fracas
Definição
Uma entidade é qualquer objeto distinguível do mundo real que deve ser representado no banco de dados (C.J. Date).
Tipos de Entidades
- Fortes: Possuem chave primária própria (ex.: Fornecedores, com SID único).
- Fracas: Dependem de outra entidade via chave estrangeira (ex.: Fornecimentos, depende de Fornecedores e Peças).
-- Entidade Forte: Fornecedores CREATE TABLE fornecedores ( sid VARCHAR(10) PRIMARY KEY, sname VARCHAR(100) NOT NULL ); -- Entidade Fraca: Fornecimentos CREATE TABLE fornecimentos ( sid VARCHAR(10) REFERENCES fornecedores, pid VARCHAR(10) REFERENCES pecas, qty INTEGER, PRIMARY KEY (sid, pid) );
CREATE TABLE fornecimentos_projeto ( sid VARCHAR(10) REFERENCES fornecedores, pid VARCHAR(10) REFERENCES pecas, jid VARCHAR(10) REFERENCES projetos, qty INTEGER, PRIMARY KEY (sid, pid, jid) );
Atributos e Chaves: Descrevendo Entidades
// Simples, Compostos, Multivalorados, Chaves
Tipos de Atributos
- Simples: Atômicos, indivisíveis (ex.: SNAME). No modelo relacional, todos os atributos devem ser atômicos (C.J. Date).
- Compostos: Divisíveis em subatributos (ex.: Endereço → Rua, Cidade).
- Multivalorados: Múltiplos valores (ex.: Telefones, mapeado como tabela separada).
- Derivados: Calculados (ex.: Idade a partir de Data de Nascimento).
Chaves
- Chave Primária (PK): Identificador único, nunca nulo (Regra de Integridade 1).
- Chave Candidata: Outros atributos/combinações que poderiam ser PK.
-- Entidade com atributos e chaves CREATE TABLE pecas ( pid VARCHAR(10) PRIMARY KEY, -- Chave primária pname VARCHAR(100), -- Simples endereco_rua VARCHAR(100), -- Composto (parte) endereco_cidade VARCHAR(50) -- Composto (parte) ); -- Tabela para atributo multivalorado CREATE TABLE pecas_cores ( pid VARCHAR(10) REFERENCES pecas, cor VARCHAR(20), PRIMARY KEY (pid, cor) );
SID (único), SNAME (se for único no domínio)
Relacionamentos: Conectando Entidades
// Binário, Ternário, Unário
Um relacionamento é uma associação bidirecional entre entidades, descrevendo como interagem (C.J. Date).
Grau do Relacionamento
- Binário: Entre duas entidades (ex.: Fornecedores fornecem Peças).
- Ternário: Entre três entidades (ex.: Fornecedores, Peças, Projetos).
- Unário: Entidade relacionada consigo mesma (ex.: Funcionário gerencia Funcionário).
-- Relacionamento Binário (Fornecedores-Peças) CREATE TABLE sp ( sid VARCHAR(10) REFERENCES fornecedores, pid VARCHAR(10) REFERENCES pecas, PRIMARY KEY (sid, pid) ); -- Relacionamento Unário (Funcionários) CREATE TABLE funcionarios ( fid VARCHAR(10) PRIMARY KEY, gerente_id VARCHAR(10) REFERENCES funcionarios );
CREATE TABLE spj ( sid VARCHAR(10) REFERENCES fornecedores, pid VARCHAR(10) REFERENCES pecas, jid VARCHAR(10) REFERENCES projetos, PRIMARY KEY (sid, pid, jid) );
Cardinalidade e Participação: Definindo Regras
// 1:1, 1:N, N:M e Obrigatória/Opcional
Cardinalidade
Tipo | Definição | Exemplo |
---|---|---|
1:1 | Uma entidade associada a uma única ocorrência de outra. | Funcionário e CPF. |
1:N | Uma entidade associada a várias ocorrências de outra. | Projeto e Tarefas. |
N:M | Várias ocorrências de ambas as entidades associadas. | Fornecedores e Peças. |
Participação
- Obrigatória (total): Linha dupla, chave estrangeira não nula (Regra de Integridade 2).
- Opcional (parcial): Linha simples, chave estrangeira pode ser nula.
-- 1:N, Participação Obrigatória CREATE TABLE tarefas ( tid VARCHAR(10) PRIMARY KEY, jid VARCHAR(10) REFERENCES projetos NOT NULL ); -- N:M, Participação Opcional CREATE TABLE sp ( sid VARCHAR(10) REFERENCES fornecedores, pid VARCHAR(10) REFERENCES pecas, PRIMARY KEY (sid, pid) );
1:N (um Departamento tem muitos Funcionários), participação obrigatória (cada Funcionário deve estar em um Departamento).
Estudo de Caso: Sistema Fornecedor-Peça-Projeto
// Diagrama ER no PostgreSQL
Desenhe um diagrama ER para o sistema Fornecedor-Peça-Projeto:
1. Entidades: Fornecedores, Peças, Projetos, Fornecimentos.
2. Atributos e chaves (ex.: SID, PNAME, QTY).
3. Relacionamentos com grau, cardinalidade e participação.
4. Analise o plano de execução de uma consulta com EXPLAIN.
-- Diagrama ER Textual [Fornecedores] -- N:M --> [Peças] SID (PK) PID (PK) SNAME PNAME CIDADE [Fornecimentos] SID (FK), PID (FK), QTY -- Consulta exemplo SELECT s.sname, p.pname FROM fornecedores s JOIN sp ON s.sid = sp.sid JOIN pecas p ON sp.pid = p.pid; EXPLAIN ANALYZE SELECT s.sname, p.pname FROM fornecedores s JOIN sp ON s.sid = sp.sid JOIN pecas p ON sp.pid = p.pid;
Entidades: - Fornecedores (SID, SNAME, CIDADE) - Peças (PID, PNAME, CIDADE) - Projetos (JID, JNAME) - Fornecimentos (SID, PID, JID, QTY) Relacionamentos: - Fornecedores-Peças: N:M, opcional, via Fornecimentos - Fornecedores-Projetos: N:M, opcional, via Fornecimentos - Peças-Projetos: N:M, opcional, via Fornecimentos
EXPLAIN ANALYZE SELECT s.sname, p.pname FROM fornecedores s JOIN sp ON s.sid = sp.sid JOIN pecas p ON sp.pid = p.pid; -- Output: Mostra uso de índices nas chaves estrangeiras
Quiz Interativo
// Teste seus conhecimentos sobre MER
Teste de Conhecimento
Responda às perguntas para consolidar o aprendizado sobre o Modelo Entidade-Relacionamento.
1. O que define uma entidade forte?
2. Qual tipo de atributo é atômico?
3. O que é uma chave candidata?
4. Qual é um exemplo de relacionamento unário?
5. O que indica participação obrigatória?
RUN mer_quiz_check; -- Quiz finalizado. Parabéns por explorar o MER!