Competições Senac RS · Seletiva 26

Módulo 03 · Atividade de pesquisa · Segunda 10/08

Auditoria de um banco real

QuemRicardoBancoSakilaTempo1h30 cronometradasBaseApostila §1 a §6
Ocupação: Desenvolvimento de Sistemas Treinador: Diogo Roehrs
R Ricardo Atividade individual · 1h30 cronometradas · entrega em PR
💡Nota

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: Sakila

banco de exemplo oficial do MySQL. Modela uma rede de locadoras de filmes: acervo, atores, clientes, aluguéis, pagamentos, lojas e funcionários.

Onde achar: Documentação oficial do MySQL, seção Sakila Sample Database. Procure a página de estrutura, que traz o diagrama ER e a lista de tabelas, e o arquivo sakila-schema.sql com o DDL completo.

O Álvaro 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

Bloco 1 · 30 minutos

Entender e recortar o modelo

O banco inteiro é grande demais pra hora e meia. Recorta.

  1. Ache o schema (o CREATE TABLE de verdade, não só o desenho) e o diagrama ER.
  2. 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.
  3. 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.
  4. Marque no teu desenho: PK de cada tabela, toda FK, e a cardinalidade com mínimo e máximo de cada linha.
⚠️Pega-ratão

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.

Bloco 2 · 20 minutos

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.

🎯Foco de prova

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 acervo e os aluguéis dão bons achados de normalização. Pra ciclo, olhe o lado da operação: loja, funcionário e endereço. Repare em quais FKs aceitam nulo, porque nulo quase sempre é o rastro de um ciclo que alguém precisou resolver.

Bloco 3 · 15 minutos

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.

  1. Se eu declarar uma FK sem escrever ON DELETE nem ON 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.
  2. Existe constraint adiada (DEFERRABLE, verificada só no COMMIT) 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.
  3. 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 — Sakila

## 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

TempoO quê
0:00 – 0:05Enquadramento e leitura desta página
0:05 – 0:35Bloco 1: achar, recortar e redesenhar
0:35 – 0:55Bloco 2: caçar normalização e ciclos
0:55 – 1:10Bloco 3: as três perguntas e o teste na máquina
1:10 – 1:25Fechar o parecer e abrir o PR
1:25 – 1:30Defesa relâmpago com o Álvaro
🛠️Gambiarra boa

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 que derruba a nota


Defesa relâmpago

Nos últimos 5 minutos, tu tem 2 minutos pra apresentar o achado mais forte do teu banco. O Álvaro tem direito a uma pergunta, e a pergunta tem que ser técnica.

🎯Foco de prova

É 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.

Seletiva 26 · Desenvolvimento de Sistemas · Senac RS