🎯 Objetivo do Módulo

Você já sabe criar uma tabela e inserir dados nela.

Mas sistemas reais nunca têm só uma tabela.

Um sistema de estoque tem produtos, categorias, entradas e saídas. Um sistema de tarefas tem usuários e tarefas. Uma loja tem clientes, pedidos e produtos.

Neste módulo você vai aprender a:

✅ Criar tabelas que se relacionam corretamente ✅ Inserir dados respeitando as relações ✅ Buscar dados de múltiplas tabelas com JOIN ✅ Gerar relatórios com GROUP BY e agregações ✅ Criar Views para consultas reutilizáveis

Tudo no pgAdmin, no Query Tool, igual ao dia da prova.


1️⃣ O Problema de Uma Tabela Só

Imagine que você tem uma tabela de produtos assim:

CREATE TABLE produtos (
    id        SERIAL PRIMARY KEY,
    nome      VARCHAR(100),
    categoria VARCHAR(50),
    preco     DECIMAL(10,2)
);

INSERT INTO produtos (nome, categoria, preco) VALUES
    ('Detergente',   'Limpeza', 3.50),
    ('Vassoura',     'Limpeza', 15.00),
    ('Sabão em pó',  'Limpeza', 8.90),
    ('Caneta azul',  'Escritório', 2.00),
    ('Caneta preta', 'Escritório', 2.00),
    ('Papel A4',     'Escritório', 25.00);

Parece ok. Mas agora a empresa quer mudar o nome da categoria "Limpeza" para "Higiene e Limpeza".

Você teria que fazer:

UPDATE produtos SET categoria = 'Higiene e Limpeza'
WHERE categoria = 'Limpeza';

Funciona — mas imagine com 500 produtos. E se alguém digitar errado em um registro? A categoria fica inconsistente.


🧠 A Solução: Separar em Tabelas

A solução é criar uma tabela só para categorias e referenciar ela na tabela de produtos:

-- Tabela de categorias (tabela PAI)
CREATE TABLE categorias (
    id   SERIAL PRIMARY KEY,
    nome VARCHAR(50) NOT NULL
);

-- Tabela de produtos (tabela FILHA)
CREATE TABLE produtos (
    id           SERIAL PRIMARY KEY,
    nome         VARCHAR(100) NOT NULL,
    preco        DECIMAL(10,2) NOT NULL,
    quantidade   INTEGER DEFAULT 0,
    categoria_id INTEGER REFERENCES categorias(id)
);

Agora para mudar o nome da categoria basta uma linha:

UPDATE categorias SET nome = 'Higiene e Limpeza' WHERE id = 1;

Todos os produtos que referenciam essa categoria refletem automaticamente.


2️⃣ PK e FK — O que São e Por que Existem

🔑 PRIMARY KEY (PK) — Chave Primária