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 ordersquiz · 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