Laboratório: Evolução de Schema
Objetivo
Praticar alterações de schema em um banco de dados em produção, aplicando boas práticas de versionamento e migração.
Cenário
Você é o DBA responsável por um sistema de e-commerce em crescimento que precisa evoluir seu schema para acomodar novos requisitos de negócio.
Setup Inicial
-- Schema inicial
CREATE TABLE produtos (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
preco DECIMAL(10,2) NOT NULL,
estoque INT DEFAULT 0
);
CREATE TABLE clientes (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE pedidos (
id SERIAL PRIMARY KEY,
cliente_id INT REFERENCES clientes(id),
data_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Exercícios
1. Adição de Novas Features
-- TODO: Adicionar suporte para categorias de produtos
-- 1.1 Crie uma tabela de categorias
-- 1.2 Adicione uma coluna categoria_id em produtos
-- 1.3 Estabeleça a foreign key apropriada
2. Modificação de Estrutura Existente
-- TODO: Expandir informações de cliente
-- 2.1 Adicione colunas para telefone e endereço
-- 2.2 Torne o telefone único e não nulo
-- 2.3 Migre dados existentes adequadamente
3. Gestão de Constraints
-- TODO: Implementar regras de negócio
-- 3.1 Adicione check constraint para preço mínimo
-- 3.2 Crie unique constraint para SKU de produtos
-- 3.3 Implemente trigger para log de alterações
1. Versionamento
-- Implemente um sistema de controle de versão de schema
CREATE TABLE schema_version (
version INT PRIMARY KEY,
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
description TEXT
);
-- TODO: Crie scripts de up/down para cada alteração
2. Zero Downtime
Desenvolva estratégias para:
3. Rollback Plan
-- TODO: Para cada alteração, crie um plano de rollback
-- Exemplo:
BEGIN;
-- Alterações
ALTER TABLE produtos ADD COLUMN categoria_id INT;
-- Verificação
SELECT COUNT(*) FROM produtos WHERE categoria_id IS NULL;
-- Decisão de commit/rollback
-- COMMIT ou ROLLBACK;
END;
Critérios de Avaliação
Segurança de Dados
Performance
Tempo de execução
Impacto em produção
Uso de recursos
Manutenibilidade
Documentação
Versionamento
Scripts de rollback
Entrega
Crie um arquivo SQL contendo:
Scripts de alteração
Scripts de rollback
Documentação das mudanças
Logs de teste
Dicas
╔════════════════════════════════════════════╗
║ CHECKLIST DE ALTERAÇÕES: ║
║ □ Backup realizado? ║
║ □ Scripts testados em homologação? ║
║ □ Plano de rollback preparado? ║
║ □ Janela de manutenção definida? ║
║ □ Stakeholders notificados? ║
╚════════════════════════════════════════════╝
Próximos Passos
Implemente monitoramento de performance
Automatize testes de migração
Crie documentação detalhada
Prepare apresentação dos resultados
26 abril 2025