Introdução
Antes de criar uma única tabela, um banco de dados bem projetado começa no papel. A Modelagem ER é a técnica usada para representar visualmente a estrutura de um domínio — quais coisas existem, quais atributos elas têm, e como se relacionam entre si. É a planta baixa do banco de dados.
O modelo foi proposto por Peter Chen em 1976, num artigo que se tornaria um dos mais citados na história da computação. A ideia central era simples: representar o mundo real através de entidades, atributos e relacionamentos, e fazer isso de forma independente de qualquer banco de dados específico. O diagrama ER é uma linguagem de comunicação entre analistas, desenvolvedores e clientes, antes de qualquer linha de SQL ser escrita.
Entidades
Uma entidade é qualquer coisa do mundo real que tem existência independente e sobre a qual queremos armazenar informações. No diagrama, entidades são representadas por retângulos.
Exemplos de entidades: Cliente, Produto, Pedido, Funcionário, Departamento.
Existe uma distinção importante entre:
- Tipo de entidade: a definição abstrata — o conceito de "Cliente"
- Instância de entidade: um cliente específico — "Ana Lima, CPF 123.456.789-00"
Quando o modelo é convertido para o banco, o tipo de entidade vira uma tabela e cada instância vira uma linha.
Entidade Forte vs Entidade Fraca
Uma entidade forte tem existência própria — pode ser identificada por seus próprios atributos, independente de qualquer outra entidade. Cliente é uma entidade forte: existe um cliente mesmo sem nenhum pedido.
Uma entidade fraca depende de outra entidade para existir e ser identificada. No diagrama, é representada por um retângulo duplo. Um exemplo clássico: Item de Pedido não existe sem um Pedido — e seu identificador só faz sentido dentro do contexto daquele pedido (item 1 do pedido 10, item 1 do pedido 11 são coisas diferentes, mas têm o mesmo número).
Atributos
Atributos descrevem as propriedades de uma entidade. No diagrama, são representados por elipses conectadas à entidade.
Atributo Simples
Valor único e indivisível. nome, preco, data_nascimento. É o tipo mais comum.
Atributo Composto
Pode ser subdividido em partes menores com significado próprio. endereco pode ser decomposto em rua, numero, cidade, cep. No diagrama, o atributo composto tem sub-elipses conectadas a ele.
Na conversão para tabelas, há uma escolha: manter como coluna única (endereco VARCHAR) ou expandir em colunas separadas (rua, numero, cidade). A decisão depende de se será necessário filtrar ou ordenar por partes do endereço.
Atributo Multivalorado
Pode ter mais de um valor para a mesma entidade. Uma Pessoa pode ter vários telefones. No diagrama, é representado por uma elipse dupla.
Na conversão para tabelas, atributos multivalorados viram tabelas separadas — pois uma coluna não pode guardar múltiplos valores (violaria a 1FN).
CREATE TABLE telefones (
id INT PRIMARY KEY,
pessoa_id INT REFERENCES pessoas(id),
numero VARCHAR(20)
);
Atributo Derivado
Calculado a partir de outro atributo — não é armazenado, é computado. idade é derivado de data_nascimento. No diagrama, é representado por uma elipse tracejada.
Em SQL, atributos derivados podem ser implementados como colunas calculadas ou simplesmente computados na consulta:
SELECT
nome,
EXTRACT(YEAR FROM AGE(data_nascimento)) AS idade
FROM pessoas;
Atributo-Chave
O atributo que identifica unicamente cada instância da entidade. No diagrama, é sublinhado. Corresponde à chave primária na tabela.
Relacionamentos
Um relacionamento representa uma associação entre duas ou mais entidades. No diagrama, é representado por um losango conectado às entidades participantes.
[Cliente] ——— <faz> ——— [Pedido]
Assim como entidades, relacionamentos também podem ter atributos. Um relacionamento Matricula entre Aluno e Curso pode ter o atributo data_matricula e nota — valores que pertencem à relação, não a nenhuma das entidades isoladamente.
Grau do Relacionamento
O grau indica quantas entidades participam do relacionamento.
Binário (grau 2): o mais comum. Dois tipos de entidade se relacionam.
[Cliente] ——— <compra> ——— [Produto]
Ternário (grau 3): três entidades participam simultaneamente. Um Médico prescreve um Medicamento para um Paciente — e os três fazem parte do mesmo relacionamento.
Unário (grau 1 / auto-relacionamento): uma entidade se relaciona consigo mesma. Funcionário pode ser gerenciado por outro Funcionário.
[Funcionário] ——— <gerencia> ——— [Funcionário]
Cardinalidade
A cardinalidade define quantas instâncias de uma entidade podem se associar a instâncias da outra. É a informação mais importante de um relacionamento.
1:1 — Um para Um
Cada instância de A se associa a no máximo uma instância de B, e vice-versa.
[Pessoa] ——1—— <tem> ——1—— [Passaporte]
Uma pessoa tem um passaporte; um passaporte pertence a uma pessoa. Na conversão, a chave estrangeira pode ficar em qualquer um dos lados — por convenção, fica na entidade mais fraca ou mais dependente.
1:N — Um para Muitos
Cada instância de A pode se associar a várias de B, mas cada instância de B se associa a apenas uma de A.
[Cliente] ——1—— <faz> ——N—— [Pedido]
Um cliente faz vários pedidos; cada pedido pertence a um cliente. A chave estrangeira sempre fica no lado N — pedidos.cliente_id.
N:N — Muitos para Muitos
Cada instância de A pode se associar a várias de B, e vice-versa.
[Aluno] ——N—— <matricula> ——N—— [Curso]
Um aluno se matricula em vários cursos; um curso tem vários alunos. Na conversão, exige uma tabela de junção — pois não há como representar isso com uma simples chave estrangeira.
CREATE TABLE matriculas (
aluno_id INT REFERENCES alunos(id),
curso_id INT REFERENCES cursos(id),
data_entrada DATE,
nota_final DECIMAL(4,2),
PRIMARY KEY (aluno_id, curso_id)
);
Do Diagrama ER ao Esquema Relacional
A conversão segue regras sistemáticas:
| Elemento ER | Resultado no banco |
|---|---|
| Entidade forte | Tabela |
| Atributo simples | Coluna |
| Atributo composto | Colunas para cada componente |
| Atributo multivalorado | Tabela separada com FK |
| Atributo derivado | Coluna calculada ou consulta |
| Relacionamento 1:1 | FK em um dos lados |
| Relacionamento 1:N | FK no lado N |
| Relacionamento N:N | Tabela de junção |
| Entidade fraca | Tabela com chave composta (PK parcial + FK da forte) |
| Especialização | Tabela única, por subtipo, ou apenas subtipos |
Top comments (0)