Contexto
Modelar bem é tão importante quanto consultar bem. Quando o schema é fraco, qualquer consulta que vier depois carrega o problema. Este projeto foi escolhido propositalmente para exercitar todo o ciclo de modelagem relacional , não só escrever SQL, mas projetar o domínio antes.
Problema
Construir, a partir de requisitos de negócio escritos em linguagem natural, um banco de dados para gestão acadêmica de uma faculdade: alunos, cursos, disciplinas, turmas, professores, matrículas e avaliações, com todas as integridades referenciais corretas e documentação que outra pessoa consiga manter no futuro.
Abordagem
- Levantamento de requisitos escrito em prosa estruturada (não bullet points soltos).
- Modelo conceitual: entidades, relacionamentos, cardinalidades em brModelo.
- Modelo lógico: normalização até 3ª FN, com associativas para N:N e auto-relacionamento para hierarquia de pré-requisitos.
- Dicionário de dados: toda coluna documentada com tipo, restrição, regra de domínio e finalidade (xlsx).
- Implementação física: script DDL + DML + DQL idempotente em MySQL Workbench.
- Queries analíticas: JOINs múltiplos, agregações, subqueries para perguntas de gestão acadêmica.
Entregas
Decisões de modelagem
- Tabelas associativas para N:N entre aluno↔disciplina (matricula) e disciplina↔professor (alocação).
- Auto-relacionamento em disciplina para representar pré-requisitos sem schema duplicado.
- Constraints explícitas: NOT NULL, UNIQUE, FK com ON DELETE escolhido caso a caso.
- Soft delete em entidades históricas (matricula, avaliação), auditoria preservada.
- Convenção de nomes consistente em snake_case, singular para entidade.
Resultado
O entregável é um pacote completo: alguém que pegue o repositório consegue executar o script, popular o banco com dados de exemplo, rodar queries analíticas e entender cada decisão lendo o dicionário de dados.
Esse é o padrão de entrega que aprendi na advocacia, relatório técnico não é tarefa cumprida quando você entende; é cumprida quando outra pessoa consegue continuar de onde você parou.
Stack
Aprendizados
O ganho real desse projeto não foi o SQL, foi o processo. Escrever os requisitos em prosa primeiro, antes de desenhar qualquer tabela, obriga a pensar no domínio. Quase todo erro de schema é, na verdade, um erro de compreensão do negócio.
Também aprendi que script idempotente é um padrão de respeito ao próximo desenvolvedor. Quem for rodar amanhã não quer descobrir que tem que apagar tabela na mão.