AULA 52 MÓDULO 7 banco de dados ⏱ 55 min

Modelagem de Dados Relacional

Normalização: 1FN, 2FN, 3FN. Relacionamentos: 1:1, 1:N, N:M. ON DELETE CASCADE vs RESTRICT. Schema de e-commerce.

modelagemnormalização1FN2FN3FN1:NN:Mforeign keyCASCADE

Modelagem de dados relacional

Modelagem é o processo de definir como os dados serão estruturados, relacionados e acessados. Uma boa modelagem reduz redundância, garante integridade e facilita queries.

3 FORMAS NORMAIS (SIMPLIFICADO)
1FN
Valores atômicos. Sem grupos repetitivos. Chave primária.
2FN
Atributos não-chave dependem da chave inteira (não de parte).
3FN
Sem dependências transitivas — cada coluna depende da chave, nada mais.
⚠️
desnormalização intencional
Desnormalizar pode ser necessário para performance em leituras frequentes. Duplicar dados controladamente é trade-off aceitável com cache ou CQRS.

Relacionamentos

Os 3 tipos de relacionamento e como implementá-los em SQL:

1:1
User → Profile. FK na tabela filho. Raro — pode ser colunas na mesma tabela.
1:N
User → Orders. FK order.user_id referenciando users.id. O mais comum.
N:M
Users ↔ Roles. Tabela intermediária: user_roles(user_id, role_id).
javascript
-- Schema de e-commerce — modelagem real

CREATE TABLE users (
  id         UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email      TEXT UNIQUE NOT NULL,
  name       TEXT NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE orders (
  id         UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id    UUID NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
  status     TEXT NOT NULL CHECK (status IN ('pending','paid','shipped','done')),
  total      NUMERIC(10,2) NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE order_items (
  id         UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  order_id   UUID NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
  product_id UUID NOT NULL REFERENCES products(id),
  qty        INT NOT NULL CHECK (qty > 0),
  unit_price NUMERIC(10,2) NOT NULL
);

-- ON DELETE CASCADE: deletar order deleta os items
-- ON DELETE RESTRICT: não deixa deletar user com orders
quiz · aula 52
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Na 3FN, um atributo deve depender de...
QUESTÃO 02
Como implementar um relacionamento N:M (usuários e roles)?
QUESTÃO 03
O que faz ON DELETE CASCADE?
0/3