Projeto Final: Modelar e Popular um Banco
1 min de leitura
O projeto final junta modelagem, criação de tabela, relacionamento e consulta numa entrega só: um banco de dados pequeno, completo e funcional, para o tema de uma livraria.
Passo 1: modele as entidades
Antes de escrever SQL, desenhe no papel: livros, autores,
clientes, pedidos. Defina os atributos de cada um e os
relacionamentos entre eles (lembrando do nó de modelagem).
Passo 2: crie as tabelas
CREATE TABLE autores (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL
);
CREATE TABLE livros (
id SERIAL PRIMARY KEY,
titulo VARCHAR(200) NOT NULL,
preco NUMERIC(10, 2) NOT NULL,
autor_id INTEGER NOT NULL REFERENCES autores(id)
);
CREATE TABLE clientes (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL
);
CREATE TABLE pedidos (
id SERIAL PRIMARY KEY,
cliente_id INTEGER NOT NULL REFERENCES clientes(id),
livro_id INTEGER NOT NULL REFERENCES livros(id),
criado_em TIMESTAMP DEFAULT now()
);
Passo 3: popule com dado de teste
INSERT INTO autores (nome) VALUES ('Machado de Assis'), ('Clarice Lispector');
INSERT INTO livros (titulo, preco, autor_id) VALUES
('Dom Casmurro', 39.90, 1),
('A Hora da Estrela', 34.90, 2);
INSERT INTO clientes (nome, email) VALUES ('Ana Silva', 'ana@email.com');
INSERT INTO pedidos (cliente_id, livro_id) VALUES (1, 1), (1, 2);
Passo 4: escreva 5 consultas que provam que o banco funciona
Cada consulta abaixo precisa devolver resultado correto no seu banco:
- Todos os livros com o nome do autor (
JOIN). - Quantos pedidos cada cliente fez (
GROUP BY+COUNT). - Clientes que gastaram acima da média (subquery ou CTE).
- O livro mais caro (
ORDER BY+LIMIT). - Uma transação que cria um pedido e, no mesmo
BEGIN/COMMIT, confirma que o livro referenciado existe.
Passo 5: rode EXPLAIN numa das consultas
Escolha a consulta do passo 4 (ORDER BY + LIMIT) e rode
EXPLAIN nela. Anote se o banco usou índice ou varredura completa,
e crie um índice se fizer sentido.
- Modelagem vem antes do
CREATE TABLE, não depois. - Populamento com dado realista revela problema de modelagem cedo.
- Consultas variadas (join, agregação, subquery) provam que o banco resolve perguntas reais, não só guarda dado.
Dica: sem PostgreSQL instalado, o Try-SQL Editor do W3Schools roda um banco de exemplo direto no navegador. Serve para praticar
SELECT,JOINeGROUP BYsem instalar nada, mesmo não sendo o mesmo banco usado nos comandos deste projeto.
Parabéns por terminar a trilha. SQL muda pouco de um banco para outro (PostgreSQL, MySQL, SQLite): o que você aprendeu aqui atravessa qualquer stack que usar banco relacional depois.