Exercícios

Pratique com tarefas curtas. Sempre explicando o porquê e o como fazer.

Iniciante

  1. Modele uma tabela cliente com PK, nome e email único. Por quê: integridade. Como: PK (id) e UNIQUE (email).
  2. Insira 3 clientes e consulte apenas os que têm email. Por quê: filtragem. Como: WHERE email IS NOT NULL.
  3. Crie a tabela pedido com FK para cliente. Por quê: relação. Como: FOREIGN KEY.
CREATE TABLE cliente (
  id SERIAL PRIMARY KEY,
  nome TEXT NOT NULL,
  email TEXT UNIQUE
);

CREATE TABLE pedido (
  id SERIAL PRIMARY KEY,
  cliente_id INT REFERENCES cliente(id),
  total NUMERIC(10,2) NOT NULL
);
      

Técnico

  1. Crie índice em pedido(cliente_id) e compare EXPLAIN antes/depois. Por quê: acelerar JOIN/filtro. Como: CREATE INDEX.
  2. Implemente transação de transferência entre contas com rollback em caso de erro. Por quê: atomicidade. Como: BEGIN/COMMIT/ROLLBACK.
  3. Projete consulta com agregação (total por cliente) e ordene. Por quê: relatórios. Como: GROUP BY.
CREATE INDEX idx_pedido_cliente ON pedido (cliente_id);
EXPLAIN ANALYZE SELECT * FROM pedido WHERE cliente_id = 1;

-- Agregação
SELECT c.nome, SUM(p.total) AS total
FROM cliente c JOIN pedido p ON p.cliente_id = c.id
GROUP BY c.nome
ORDER BY total DESC;
      

Avançado

  1. Particione pedido por faixa de data. Por quê: manutenção/performance. Como: tabelas particionadas.
  2. Implemente um mini‑ETL: exporte pedido diário e gere resumo (OLAP) em tabela colunar/sumarizada. Por quê: separar OLTP/OLAP. Como: job diário + tabela agregada.
  3. Elabore política de retenção (ex.: 18 meses). Por quê: custo/lei. Como: DELETE/ARCHIVE programado.

Dica: use o arquivo docs/dados.txt como fonte simples para popular tabelas em seus testes.