No contexto do projeto de bancos de dados relacionais, considere uma tabela T composta pelas colunas “A”, ”B”, “C” e “D”. Verificam-se para essa tabela as dependências funcionais a seguir. A -> B A -> C B -> A B -> D Assinale o conjunto de constraints que devem ser aplicadas à tabela referida, de modo que a mesma atenda plenamente às formas normais.
- A)CONSTRAINT XPTO UNIQUE (A, B)
Errada: UNIQUE(A, B) não garante que A e B, separadamente, sejam únicos, então não preserva as chaves candidatas encontradas pelas dependências funcionais.
- B)CONSTRAINT XPTO UNIQUE (A, B, C, D)
Errada: UNIQUE(A, B, C, D) só impede repetição da tupla inteira, mas não impede repetição de A ou de B isoladamente.
- C)CONSTRAINT XPTO1 UNIQUE (A) CONSTRAINT XPTO2 UNIQUE (B)
Certa: UNIQUE(A) e UNIQUE(B) garantem exatamente as duas chaves candidatas da relação, alinhadas às dependências funcionais dadas.
- D)CONSTRAINT XPTO1 UNIQUE (A, B, C) CONSTRAINT XPTO2 UNIQUE (A, B, C)
Errada: além de repetir a mesma restrição duas vezes, UNIQUE(A, B, C) continua não assegurando unicidade de A nem de B separadamente.
- E)CONSTRAINT XPTO1 UNIQUE (A, C) CONSTRAINT XPTO2 UNIQUE (B, C)
Errada: UNIQUE(A, C) e UNIQUE(B, C) impõem combinações que não correspondem às chaves candidatas e ainda deixam de garantir a unicidade isolada de A e de B.
Gabarito: C
Aqui a ideia central é identificar as chaves candidatas da tabela. Pelas dependências funcionais, A determina B e C, e como B determina A e D, então A fecha em {A, B, C, D}. O mesmo acontece com B: ele determina A, que por sua vez determina C e volta para B, além de também determinar D. Resultado: A e B são chaves candidatas. Quando você quer que uma tabela relacional respeite essas dependências e fique em forma normal adequada, a chave deve ser garantida por restrição de unicidade. Como há duas chaves candidatas, você precisa impor UNIQUE em A e UNIQUE em B. Assim, nenhuma linha pode repetir A nem repetir B, o que preserva os determinantes mínimos apontados pelas FDs. Isso também conversa com a teoria de normalização: como os lados esquerdos das dependências são superchaves, a relação atende à lógica de BCNF. Em provas de banco de dados, a banca costuma misturar dependência funcional com constraint SQL para ver se você percebe qual coluna, sozinha, já identifica a tupla. Por isso o gabarito é a alternativa C: duas constraints UNIQUE, uma sobre A e outra sobre B. As demais opções ou juntam colunas sem necessidade, ou repetem a mesma restrição, ou deixam de garantir as chaves candidatas corretamente.