Questão nº 40
Questão de Tecnologia da Informação · FGV STN 2024 (nº 40)
Com referência à normalização de bancos de dados, considere uma tabela relacional T, com colunas C, H, N, P, na qual as dependências funcionais identificadas são exibidas a seguir.
```
C -> H
C -> P
C -> N
P -> C
```
O comando SQL utilizado na criação dessa tabela é exibido a seguir.
```sql
create table T (
C int not null unique,
H int null unique,
P int null unique,
N int not null
)
```
Assinale a dependência funcional adicional necessária para que o esquema acima esteja de acordo com a forma normal Boyce-Codd.
- AC, H, P -> N
- BH -> P (alternativa correta)
- CN -> P
- DN -> H
- EP, H -> C
Resposta comentada
Gabarito Alternativa B
A Forma Normal Boyce-Codd (BCNF) é uma regra de normalização de bancos de dados que exige que, para cada dependência funcional (DF) não trivial em uma tabela, o determinante seja uma superchave. Uma superchave é qualquer conjunto de atributos que contém uma chave candidata (um conjunto mínimo de atributos que identifica unicamente cada linha da tabela). Em termos simples, em BCNF, apenas superchaves podem determinar outros atributos.
Vamos analisar a questão:
Tabela: T (C, H, N, P)
Dependências Funcionais (DFs) identificadas:
- C \rightarrow H\
- C \rightarrow P\
- C \rightarrow N\
Comando SQL:
create table T ( C int not null unique, H int null unique, P int null unique, N int not null )
Análise Inicial:
- Chaves Candidatas (CKs) a partir das DFs:
- (C determina todos os atributos, então C é uma CK).
- (P determina todos os atributos, pois e . Então P é uma CK).
- CKs identificadas pelas DFs: {C}, {P}.
- Chaves Candidatas (CKs) a partir do SQL:
C int not null unique: C é uma CK.P int null unique: P é uma CK.H int null unique: H é uma CK.- CKs identificadas pelo SQL: {C}, {P}, {H}.
O Conflito:
O SQL declara H como uma chave candidata (UNIQUE), mas as DFs fornecidas não implicam que H seja uma CK. Para H ser uma CK, deveriam ser verdadeiras. No entanto, a partir das DFs dadas, , o que significa que H não é uma CK. Essa é a inconsistência que a questão pede para resolver, garantindo que o esquema esteja em BCNF. Precisamos adicionar uma DF que torne H uma CK e que, com todas as DFs, o esquema esteja em BCNF.
Análise das Alternativas:
-
A) C, H, P -> N
- Incorreta: O determinante é um superconjunto de C, que já é uma CK. Portanto, já é uma superchave. Adicionar esta DF não resolve a inconsistência de H não ser uma CK e não introduz uma violação de BCNF.
-
(B) Correta: H -> P
- Por que é o gabarito: Se adicionarmos a DF ao conjunto existente:
- Novas DFs: .
- Verificando se H se torna uma CK:
- (adicionada)
- (dada) (por transitividade)
- (dada) (C e H são chaves equivalentes)
- (dada) e
- Portanto, . H agora determina todos os atributos, tornando-o uma Chave Candidata, consistente com a declaração
UNIQUEno SQL.
- Verificando BCNF:
- As chaves candidatas agora são {C}, {P}, {H} (pois ).
- Para cada DF no novo conjunto:
- : C é CK. OK.
- : C é CK. OK.
- : C é CK. OK.
- : P é CK. OK.
- : H é CK. OK.
- Todos os determinantes são superchaves. Assim, o esquema está em BCNF e a inconsistência de H como CK é resolvida.
- Por que é o gabarito: Se adicionarmos a DF ao conjunto existente:
-
C) N -> P
- Incorreta: Se adicionarmos :
- Novas DFs: .
- Verificando se H se torna uma CK:
- . H não se torna uma CK. Embora implique , não há DFs que comecem com H para determinar outros atributos.
- Portanto, esta opção não resolve a inconsistência de H ser declarado
UNIQUEmas não ser uma CK.
- Armadilha: Esta alternativa pode ser tentadora porque, se considerarmos apenas as DFs e as chaves que elas implicam ({C}, {P}, {N}), o esquema estaria em BCNF (pois N se torna uma CK). No entanto, ela falha em resolver a inconsistência crucial com a restrição
UNIQUEde H no SQL.
- Incorreta: Se adicionarmos :
-
D) N -> H
- Incorreta: Se adicionarmos :
- Novas DFs: .
- Verificando CKs: . N não é uma CK.
- Verificando BCNF: A DF tem N como determinante, mas N não é uma superchave. Isso cria uma violação de BCNF, em vez de resolvê-la.
- Incorreta: Se adicionarmos :
-
E) P, H -> C
- Incorreta: O determinante é um superconjunto de P, que já é uma CK. Portanto, já é uma superchave. Adicionar esta DF não resolve a inconsistência de H não ser uma CK e não introduz uma violação de BCNF.
Fonte: FGV STN 2024 Auditor Federal de Finanças e Controle - Tecnologia da Informação (Operação e Infraestrutura) (Caderno Tipo 1). Reproduzida para fins de estudo.