Questão nº 42
Questão de Tecnologia da Informação · FGV MPGO Servidores 2022 (nº 42)
No Campeonato Brasileiro de Futebol, todos os times jogam entre si duas vezes, alternando os papeis de mandante e visitante. Um time não pode jogar mais de uma vez na mesma data.
Nesse contexto, considere uma tabela de bancos de dados que armazene simplificadamente essas informações, com as seguintes colunas: `time_mandante`, `time_visitante`, `data`, `gols_mandante`, `gols_visitante`.
À luz dessas premissas, assinale a lista com todas as combinações de colunas que devem, necessária e exclusivamente, ser estabelecidas como restrições (primary key ou unique) para atender à Forma Normal Boyce-Codd.
- A`(time_mandante, time_visitante)`
- B`(time_mandante, data)`
`(time_visitante, data)` - C`(time_mandante, data, gols_mandante)`
`(time_visitante, data, gols_visitante)` - D`(time_mandante, time_visitante)`
`(time_visitante, time_mandante)` - E`(time_mandante, time_visitante)`
`(time_mandante, data)`
`(time_visitante, data)` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Conceito-chave: Na Forma Normal Boyce-Codd (FNBC), toda dependência funcional (regra que diz "se eu sei o valor de X, sei o valor de Y") deve ter como determinante (o lado X) uma superchave (uma coluna ou conjunto que identifica a linha de forma única). No problema, as regras do campeonato criam dependências funcionais escondidas: saber o time e a data me diz exatamente qual é o adversário e o placar.
- (A) Incorreta:
(time_mandante, time_visitante)identifica o jogo, mas não impede que o mesmo time jogue duas vezes na mesma data (ex: time A como mandante no dia 10 e time A como visitante no dia 10). Viola a regra "um time não pode jogar mais de uma vez na mesma data". - (B) Incorreta: Faltam as chaves
(time_mandante, data)e(time_visitante, data)que garantem que cada time joga uma única vez por data. Sem elas, a tabela permite jogos simultâneos do mesmo time. - (C) Incorreta: Incluir
gols_mandanteegols_visitantena chave é um erro grave: os gols são atributos dependentes do jogo, não fazem parte da identificação. Isso criaria redundância e violaria a FNBC, pois(time_mandante, data)determinaria os gols sem ser superchave. - (D) Incorreta: A dupla
(time_mandante, time_visitante)e(time_visitante, time_mandante)são a mesma informação espelhada (o jogo A vs B é o mesmo que B vs A). Isso não resolve a restrição de data, que é a regra de negócio mais forte. - (E) Correta: São necessárias três restrições:
(time_mandante, time_visitante)para identificar o confronto único (jogo de ida e volta são linhas diferentes, pois a ordem muda),(time_mandante, data)e(time_visitante, data)para garantir que nenhum time jogue duas vezes na mesma data. Essas três juntas eliminam todas as dependências parciais e garantem que todo determinante seja superchave, atendendo à FNBC.
Armadilha da banca (no distrator B): A alternativa B parece correta porque lista as duas restrições de data, mas omite a chave primária do jogo em si. Sem (time_mandante, time_visitante), você não consegue identificar qual é o jogo (a linha não tem identidade única), e a tabela ficaria sem PK, o que viola a definição de FNBC (que exige que toda tabela tenha uma chave primária). A banca testa se você percebe que a FNBC exige todas as restrições necessárias, não apenas as mais óbvias.
Fonte: FGV MPGO Servidores 2022 Analista em Informática (Caderno Tipo 1). Reproduzida para fins de estudo.