Questão de Banco de Dados — Normalização — FCC 2026
Banco de Dados›Normalização
Código
fc142090
Banca
FCC
Órgão
MPE SE
Ano
2026
Cargo
Ana ( )
Em um Ministério Público, há uma tabela AtuacaoInfracao, que relaciona promotores a infrações que investigam:
PromotorID
InfracaoID
NomePromotor
TipoInfracao
DataInicioInvestigacao
101
301
Mauro Azevedo
Ambiental
10/03/2025
101
302
Mauro Azevedo
Corrupção
01/04/2025
102
301
Marcelo Costa
Ambiental
10/03/2025
A chave primária é composta: (PromotorID, InfracaoID).
Para garantir que a tabela atenda à 2ª Forma Normal (2NF), a melhor solução é
Acriar um identificador artificial único chamado AtuacaoID para substituir a chave composta, mantendo todos os atributos (incluindo NomePromotor e TipoInfracao) na mesma tabela.
Bdeixar NomePromotor e TipoInfracao como atributos calculados que são buscados em outras fontes durante a consulta, evitando redundância, mas sem mudar o esquema original.
Ccriar duas tabelas: Promotor (PromotorID, NomePromotor) e Infracao (InfracaoID, TipoInfracao), mantendo a tabela original.
Ddividir em três tabelas: Promotor (PromotorID, NomePromotor), Infracao (InfracaoID, TipoInfracao) e AtuacaoInfracao (PromotorID, InfracaoID, DataInicioInvestigacao).
Eeliminar o campo TipoInfracao da tabela principal, registrando apenas o código InfracaoID e recuperando o nome em consultas, sem alterar a estrutura das demais colunas.
Revelar gabarito e comentário▾
GabaritoD — dividir em três tabelas: Promotor (PromotorID, NomePromotor), Infracao (InfracaoID, TipoInfracao) e AtuacaoInfracao (PromotorID, InfracaoID, DataInicioInvestigacao).
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Normalização: Segunda Forma Normal (2FN) e dependência parcial
Gabarito: letra D. Para que a tabela AtuacaoInfracao atenda à 2FN, é necessário eliminar as dependências parciais: NomePromotor depende apenas de PromotorID e TipoInfracao depende apenas de InfracaoID, enquanto a chave é composta por ambos. A solução correta é decompor a relação em três tabelas — Promotor, Infracao e AtuacaoInfracao —, cada uma com seus atributos plenamente dependentes da chave inteira.
A normalização é um processo de análise de esquemas relacionais com base em dependências funcionais e chaves primárias, com o objetivo de minimizar redundâncias e evitar anomalias de inserção, exclusão e atualização. A 2FN é uma das formas normais que trata especificamente das dependências parciais: uma relação está na 2FN se estiver na 1FN e cada atributo não-chave for total e funcionalmente dependente da chave primária (ou candidata) inteira. Em outras palavras, nenhum atributo não-chave pode depender de apenas uma parte de uma chave composta.
No caso da tabela AtuacaoInfracao, a chave primária é (PromotorID, InfracaoID). Os atributos NomePromotor e TipoInfracao são não-chave, mas cada um depende de apenas uma parte da chave: NomePromotor depende de PromotorID (um promotor tem um nome), e TipoInfracao depende de InfracaoID (uma infração tem um tipo). Isso configura dependências parciais, violando a 2FN. Para corrigir, decompõe-se a relação em três:
AtuacaoInfracao (PromotorID, InfracaoID, DataInicioInvestigacao) — chave composta (PromotorID, InfracaoID), onde DataInicioInvestigacao depende da chave inteira (a data de início da investigação é específica da combinação promotor-infração).
Essa decomposição elimina as dependências parciais e coloca a tabela na 2FN. É importante notar que a normalização não tem como objetivo melhorar a performance — na verdade, tabelas normalizadas podem gerar consultas mais complexas (com joins), mas garantem integridade e reduzem redundância. A pegadinha da banca aqui é justamente confundir a solução de normalização com outras abordagens, como criar um identificador artificial ou manter atributos calculados.
Guarde o critério decisivo: a 2FN exige que todo atributo não-chave dependa da chave inteira, não de parte dela. É exatamente nessa fronteira que as alternativas se dividem.
Critério
Alternativa A (ID artificial)
Alternativa B (Atributos calculados)
Alternativa C (2 tabelas + original)
Alternativa D (3 tabelas)
Alternativa E (Remover TipoInfracao)
Elimina dependência parcial de NomePromotor?
❌ Não
❌ Não
❌ Não
✅ Sim
❌ Não
Elimina dependência parcial de TipoInfracao?
❌ Não
❌ Não
❌ Não
✅ Sim
✅ Sim (remove o atributo)
Remove redundância de NomePromotor na tabela de relacionamento?
❌ Não
❌ Não
❌ Não
✅ Sim
❌ Não
Decompõe corretamente o esquema para 2FN?
❌ Não
❌ Não
❌ Não
✅ Sim
❌ Não
Alternativa A — ❌ Incorreta
Criar um identificador artificial (AtuacaoID) e manter todos os atributos na mesma tabela não elimina as dependências parciais. O problema não é a chave composta em si, mas o fato de NomePromotor e TipoInfracao dependerem de apenas parte da chave. Mesmo com uma chave substituta, essas dependências parciais continuariam existindo, e a tabela ainda violaria a 2FN. Além disso, manter NomePromotor e TipoInfracao na mesma tabela preservaria a redundância (o nome do promotor se repetiria para cada infração que ele investiga).
Alternativa B — ❌ Incorreta
Transformar NomePromotor e TipoInfracao em atributos calculados (buscados em outras fontes durante a consulta) não é uma solução de normalização e não altera o esquema original. Na prática, isso seria uma forma de view ou consulta com joins, mas não resolve a violação da 2FN na estrutura da tabela. Além disso, a ideia de "atributos calculados" é estranha ao modelo relacional — atributos devem ser armazenados, não calculados em tempo de consulta (isso seria uma visão materializada ou uma consulta, não uma normalização).
Alternativa C — ❌ Incorreta
Criar as tabelas Promotor e Infracaomantendo a tabela original não resolve o problema: a tabela AtuacaoInfracao original continuaria com NomePromotor e TipoInfracao, e as dependências parciais persistiriam. A alternativa C sugere criar as duas tabelas, mas não remove os atributos redundantes da tabela original — ela apenas adiciona novas tabelas, sem decompor a relação. Para atingir a 2FN, é necessário removerNomePromotor e TipoInfracao da tabela de relacionamento, o que só a alternativa D faz.
Alternativa D — ✅ Correta ⟵ GABARITO
Esta é a decomposição correta: separa Promotor (com NomePromotor), Infracao (com TipoInfracao) e AtuacaoInfracao (apenas com a chave composta e DataInicioInvestigacao). Assim, cada atributo não-chave depende da chave inteira de sua respectiva tabela: NomePromotor depende de PromotorID, TipoInfracao depende de InfracaoID, e DataInicioInvestigacao depende de (PromotorID, InfracaoID). Isso elimina as dependências parciais e coloca todas as relações na 2FN.
Alternativa E — ❌ Incorreta
Eliminar o campo TipoInfracao da tabela principal e recuperá-lo em consultas não resolve a dependência parcial de NomePromotor. A tabela ainda teria NomePromotor, que depende apenas de PromotorID, violando a 2FN. Além disso, a alternativa E não propõe a criação de uma tabela Infracao — apenas remove o atributo, o que não é uma solução de normalização adequada (e ainda deixaria a dependência parcial de NomePromotor).
NÃO CAIA NESSA!
A banca tenta confundir a solução de normalização com outras abordagens: criar chave substituta (A), atributos calculados (B), ou simplesmente remover um atributo (E). A pegadinha é achar que qualquer mudança resolve, quando o correto é a decomposição completa em três tabelas, eliminando todas as dependências parciais. Fique atento: a 2FN exige que todo atributo não-chave dependa da chave inteira.
PEGA ESSA DICA!
Para identificar dependências parciais, pergunte: "este atributo depende de apenas uma parte da chave composta?" Se sim, ele deve ser movido para uma tabela cuja chave seja exatamente essa parte. Monte a decomposição: cada atributo não-chave vai para a tabela da chave da qual depende totalmente.