06 — Inventário de tabelas escaláveis
Ref: 00_INDEX · Insumo para F1, F2, F5
Contexto
Listar as tabelas que crescem proporcional ao volume da escola e marcar onde hoje elas são lidas via fetchAllRows em rota UI (anti-padrão) ou via paginação real.
Projeção (escola "grande" alvo: 5k alunos, 1 ano letivo)
| Tabela | Cardinalidade esperada | Crescimento por | Lida via fetchAllRows em UI? | Risco |
|---|---|---|---|---|
alunos | 5k–10k | matrícula | ❌ paginação | 🟢 |
inscricoes_olimpiada | 5k × N olimpíadas × N anos = 30k–100k | olimpíada × aluno × ano | ✅ 8 lugares em resultados-queries.ts | 🔴 |
resultados_aluno | igual a inscrições × fases (~50k–200k) | fase × inscrição | ⚠️ via queryInChunks (OK) | 🟡 |
mensagens_enviadas | 5k × 10 campanhas/ano = 50k+ | campanha × destinatário | ? (não auditado) | 🟡 |
logs_transacoes | alto (toda CUD) | operação | ? | 🟡 |
aluno_responsaveis | ~5k–10k | aluno × responsavel | n/a | 🟢 |
aluno_turma_historico | 5k × N anos = 25k+ | matrícula × ano | n/a | 🟡 |
controle_aplicacoes | ~1k–5k | aplicação | já paginado (V3) | 🟢 |
notificacoes | médio | evento × usuário | ? | 🟡 |
portal_login_tentativas | alto (rate-limit) | tentativa | só agregado em SQL | 🟢 |
mural_dados_publicados | médio (snapshot) | publicação | paginado via snapshot | 🟢 |
email_outbox | alto | envio | só drenado por cron (OK) | 🟢 |
Tabelas a confirmar (sub-tarefa da Onda C)
Para cada 🟡/🔴 marcado com "?":
greppor todas as queries que tocam a tabela emsupabase/functions/.- Classificar leitura UI vs job vs agregação.
- Sugerir SQL agregado / range / fila conforme o caso.
Índices a validar (Onda A)
Confirmar via EXPLAIN ANALYZE antes do fix:
inscricoes_olimpiada (escola_id, olimpiada_id, ano_edicao)— composto, usado em todas as queries hot.inscricoes_olimpiada (escola_id, olimpiada_id, nivel_id)— filtro de nível.resultados_aluno (inscricao_id, fase_id)— já é a chave de conflict; deve haver UNIQUE INDEX.mensagens_enviadas (escola_id, criado_em DESC)— para listagem cronológica paginada.
Próximas etapas
→ As frentes F1/F2 são suficientes para mover inscricoes_olimpiada de 🔴 para 🟢. → Sub-auditoria de mensagens_enviadas, logs_transacoes, notificacoes na Onda C.