Competições Senac RS · Seletiva 26
Módulo 03 · Atividade de pesquisa · Segunda 10/08
Auditoria de um banco real
Por que essa atividade existe. Até agora vocês modelaram. Nessa hora e meia vocês vão fazer o contrário: ler o banco que outra pessoa modelou e emitir um parecer sobre ele. É exatamente o que a banca faz com o modelo de vocês na apresentação. Quem treina o olhar de auditor chega na defesa sabendo onde o avaliador vai cutucar, porque já cutucou o dos outros.
E tem um detalhe: o banco que te coube é banco de referência, usado no mundo inteiro pra ensinar SQL. Tu vai descobrir que até ele tem decisão discutível. Esse é o ponto.
O teu banco: Northwind
banco clássico da Microsoft, usado há décadas pra ensinar SQL. Modela uma distribuidora de alimentos: produtos, fornecedores, categorias, clientes, pedidos, funcionários e transportadoras.
Onde achar: O schema e o diagrama estão em repositórios públicos (procure por northwind mysql schema). Prefira uma versão com o CREATE TABLE completo, não só o desenho.
O Ricardo está auditando um banco diferente do teu. No fim vocês trocam, e por isso vale caprichar: o parecer que tu escrever é o que ele vai ter que contestar.
O que pesquisar
Entender e recortar o modelo
O banco inteiro é grande demais pra hora e meia. Recorta.
- Ache o schema (o
CREATE TABLEde verdade, não só o desenho) e o diagrama ER. - Escolha um recorte de 5 a 7 tabelas que se conversem entre si. Escolha onde tem relacionamento interessante, não as 7 primeiras da lista.
- Redesenhe esse recorte com a tua mão. Papel, dbdiagram, Workbench, tanto faz. Copiar o diagrama pronto não vale: o exercício é reconstruir lendo o DDL.
- Marque no teu desenho: PK de cada tabela, toda FK, e a cardinalidade com mínimo e máximo de cada linha.
Se tu escolher 6 tabelas que não se ligam, não vai ter o que auditar. Antes de fechar o recorte, confere que dá pra ir de uma ponta à outra seguindo FKs.
Caçar os achados
Passe o recorte pelos dois instrumentos que a gente viu hoje.
Instrumento 1 · Normalização (§5). Ache pelo menos dois achados. Achado pode ser dos dois tipos:
- uma violação de 1FN, 2FN ou 3FN, e a anomalia que ela cria;
- uma violação de propósito, o que a §5.5 chama de desnormalização consciente, e o motivo pelo qual ela se justifica ali.
Pra cada achado, escreva a anomalia nominalmente: inserção, atualização ou exclusão. "Está feio" não é achado.
Instrumento 2 · Ciclos (§6). Ache todos os ciclos do teu recorte e classifique cada um nos três tipos: auto-relacionamento, ciclo entre duas tabelas (A → B e B → A) ou ciclo longo (A → B → C → A). Pra cada um, responda o teste universal: com o banco vazio, qual linha entra primeiro? Se nenhuma entra, explique como o banco original resolveu isso.
O teu banco tem ciclo. Se tu não achou nenhum, teu recorte está errado ou tu não olhou as FKs anuláveis. O item de pedido guarda coisas que talvez já existam em outro lugar: vale investigar se isso é erro ou decisão. Pra ciclo, olhe a tabela de funcionários e a relação de chefia. Repare em quais FKs aceitam nulo, porque nulo quase sempre é o rastro de um ciclo que alguém precisou resolver.
As três perguntas técnicas
Aqui é pesquisa em fonte oficial, não em blog e não em IA. A documentação do MySQL é a fonte. Cite de onde tirou cada resposta.
- Se eu declarar uma FK sem escrever
ON DELETEnemON UPDATE, qual é o comportamento padrão no InnoDB? Nomeie a regra e diga o que acontece na prática quando alguém tenta apagar o pai. - Existe constraint adiada (
DEFERRABLE, verificada só noCOMMIT) no MySQL? Se existe, como se usa. Se não existe, quais são as saídas pra inserir duas linhas que se apontam, e qual delas tu usaria na prova. - Teste na máquina, não só na doc. Escreva um script que cria duas tabelas com FK circular entre elas, na ordem ingênua (A referenciando B antes de B existir). Rode. Copie a mensagem de erro exata. Depois conserte e escreva ao lado o que tu mudou.
O que produzir
📄 pesquisa-ciclos.md
Uma página. Não é relatório longo, é parecer. Vai em branch própria e PR aberto, como toda meta desta sprint.
Estrutura obrigatória do arquivo:
# Parecer — Northwind
## 1. Identificação
Banco, o que ele modela, fonte consultada (link).
## 2. Recorte auditado
As 5 a 7 tabelas, e o diagrama que eu redesenhei (imagem ou arquivo).
## 3. Achados de normalização
Achado 1: <tabela.coluna> fere a <forma normal> porque <motivo>.
Anomalia de <inserção|atualização|exclusão>: <o que quebra>.
Achado 2: ...
## 4. Ciclos encontrados
Ciclo 1: <tabelas> · tipo <auto | A↔B | longo>
Banco vazio, quem entra primeiro? <resposta>
Como o banco original resolveu: <resposta>
## 5. As três perguntas
1. Padrão do ON DELETE: <resposta> (fonte: <link>)
2. DEFERRABLE no MySQL: <resposta> (fonte: <link>)
3. Erro real do teste: <mensagem exata> · Correção: <o que mudei>
## 6. Veredito
Uma decisão do autor que eu MANTERIA e por quê.
Uma decisão que eu MUDARIA e por quê.
Como o tempo se divide
| Tempo | O quê |
|---|---|
| 0:00 – 0:05 | Enquadramento e leitura desta página |
| 0:05 – 0:35 | Bloco 1: achar, recortar e redesenhar |
| 0:35 – 0:55 | Bloco 2: caçar normalização e ciclos |
| 0:55 – 1:10 | Bloco 3: as três perguntas e o teste na máquina |
| 1:10 – 1:25 | Fechar o parecer e abrir o PR |
| 1:25 – 1:30 | Defesa relâmpago com o Ricardo |
Escreve enquanto pesquisa, não no fim. Quem deixa a escrita pros últimos 15 minutos entrega um parecer pela metade. Abre o arquivo no minuto 5.
Critérios de nota 3
- O recorte foi redesenhado à mão, não copiado do diagrama pronto.
- Cardinalidade com mínimo e máximo em todas as linhas do desenho.
- Os dois achados de normalização citam a anomalia nominalmente.
- Todos os ciclos do recorte encontrados e classificados nos três tipos.
- O teste "banco vazio, quem entra primeiro?" respondido pra cada ciclo.
- As três perguntas com fonte oficial citada.
- A mensagem de erro é real, copiada do console, não escrita de memória.
- O veredito tem as duas partes: o que manteria e o que mudaria.
- Branch própria, PR aberto, mensagem de commit clara.
O que derruba a nota
- Parecer que descreve o banco sem julgar nada. Descrição não é parecer.
- "Está errado" sem dizer que anomalia isso cria.
- Resposta técnica sem fonte, ou com fonte de blog quando existe doc oficial.
- Mensagem de erro inventada. Dá pra perceber, e é pior que não ter feito.
- Commit direto na
main.
Defesa relâmpago
Nos últimos 5 minutos, tu tem 2 minutos pra apresentar o achado mais forte do teu banco. O Ricardo tem direito a uma pergunta, e a pergunta tem que ser técnica.
É ensaio de banca em escala pequena. Na Seletiva tu vai ter que defender decisão de modelagem em voz alta, sob pergunta, com o relógio correndo. Começa aqui.