// aula 04 · SQL · Modelagem

Modelagem de Dados —
Projetando o banco


O que é modelagem de dados?

Projetar antes de construir

Modelagem de dados é o processo de definir a estrutura do banco antes de criar as tabelas — quais entidades existem, quais atributos cada uma tem e como elas se relacionam. Um banco bem modelado é mais rápido, mais fácil de manter e evita inconsistências.

Modelo Conceitual

Alto nível. Entidades e relacionamentos sem se preocupar com tecnologia. Ferramenta: diagrama ER.

Modelo Lógico

Define tabelas, colunas, tipos de dados e chaves. Independente do banco de dados escolhido.

Modelo Físico

O SQL real. CREATE TABLE, índices, constraints. Específico para SQL Server, MySQL, etc.


Chaves — PK e FK

PRIMARY KEY (PK)

  • Identifica cada registro de forma única
  • Não pode ser NULL
  • Não pode se repetir
  • Geralmente é um número AUTO_INCREMENT
  • Toda tabela deve ter uma PK

FOREIGN KEY (FK)

  • Referencia a PK de outra tabela
  • Garante integridade referencial
  • Impede registros "órfãos"
  • Permite definir ação ao deletar/atualizar
  • Pode ser NULL (relacionamento opcional)

-- Criando tabelas com PK e FK
CREATE TABLE clientes (
  id     INT          PRIMARY KEY AUTO_INCREMENT,
  nome   VARCHAR(100) NOT NULL,
  email  VARCHAR(150) UNIQUE,
  ativo  BOOLEAN      DEFAULT TRUE
);

CREATE TABLE pedidos (
  id          INT          PRIMARY KEY AUTO_INCREMENT,
  cliente_id  INT          NOT NULL,
  valor       DECIMAL(10,2) NOT NULL,
  criado_em   DATETIME     DEFAULT NOW(),
  FOREIGN KEY (cliente_id) REFERENCES clientes(id)
    ON DELETE CASCADE     -- apaga pedidos se cliente for deletado
    ON UPDATE CASCADE     -- atualiza se o id do cliente mudar
);

Tipos de relacionamento

1 : 1

Um para Um

Cada registro A tem no máximo um B. Ex: pessoa ↔ CPF, usuário ↔ perfil detalhado. Raro — geralmente pode ser uma tabela só.

1 : N

Um para Muitos

O mais comum. Um A tem vários B, mas cada B pertence a um A. Ex: cliente → pedidos, categoria → produtos. FK fica na tabela N.

N : N

Muitos para Muitos

Vários A para vários B. Ex: aluno ↔ curso, produto ↔ pedido. Resolve com uma tabela associativa no meio.

-- Relacionamento N:N — aluno ↔ curso
-- Tabela associativa: matriculas

CREATE TABLE alunos (
  id    INT PRIMARY KEY AUTO_INCREMENT,
  nome  VARCHAR(100)
);

CREATE TABLE cursos (
  id    INT PRIMARY KEY AUTO_INCREMENT,
  nome  VARCHAR(100)
);

CREATE TABLE matriculas (  -- tabela associativa
  aluno_id    INT,
  curso_id    INT,
  data_inicio DATE,
  PRIMARY KEY (aluno_id, curso_id),  -- PK composta
  FOREIGN KEY (aluno_id) REFERENCES alunos(id),
  FOREIGN KEY (curso_id) REFERENCES cursos(id)
);

Exemplo de diagrama ER — loja virtual

clientes
PKidINT
nomeVARCHAR(100)
UQemailVARCHAR(150)
pedidos
PKidINT
FKcliente_idINT → clientes.id
valor_totalDECIMAL(10,2)
criado_emDATETIME
itens_pedido
PKidINT
FKpedido_idINT → pedidos.id
FKproduto_idINT → produtos.id
quantidadeINT
preco_unitDECIMAL(10,2)
produtos
PKidINT
FKcategoria_idINT → categorias.id
nomeVARCHAR(150)
precoDECIMAL(10,2)
estoqueINT DEFAULT 0

Normalização — as formas normais

Organizando para evitar redundância

Normalização é o processo de organizar as tabelas para eliminar redundâncias e dependências problemáticas. Seguir as formas normais garante um banco mais limpo, consistente e fácil de manter.

1FN

1ª Forma Normal

Cada coluna tem um único valor atômico. Sem grupos repetitivos. Cada linha é única.

2FN

2ª Forma Normal

Está na 1FN + todo atributo não-chave depende da chave primária inteira (sem dependências parciais).

3FN

3ª Forma Normal

Está na 2FN + sem dependências transitivas (atributo não-chave depende de outro não-chave).