Considere um projeto de banco de dados no qual há uma tabela T com colunas a, b, c, d. Sabe-se que, para essa tabela, são verificadas as seguintes dependências funcionais: a → b a → c a → d b → c c → a Com relação às restrições de integridade decorrentes do processo de normalização da tabela T, as constraints incluídas no comando create table devem ser equivalentes a:
- A)constraint c1 unique (a)
Errada, porque a sozinho é chave candidata, mas a alternativa não contempla as outras chaves candidatas b e c.
- B)constraint c1 unique (a, b)
Errada, porque a,b não formam a restrição equivalente; b é desnecessário, já que a sozinho já determina toda a tabela.
- C)constraint c1 unique (a, b, c)
Errada, porque a,b,c não precisam estar juntos para garantir unicidade, pois cada um desses atributos sozinho já identifica a tupla.
- D)constraint c1 unique (a, b, c, d)
Errada, porque incluir todos os atributos cria uma unicidade excessiva e não reflete as chaves candidatas derivadas das dependências funcionais.
- E)constraint c1 unique (a) constraint c2 unique (b) constraint c3 unique (c)
Certa, porque a, b e c são chaves candidatas da tabela e, portanto, devem aparecer como UNIQUE separadamente.
Gabarito: E
Aqui a ideia central é descobrir quais colunas identificam unicamente cada linha da tabela, ou seja, as chaves candidatas. Pelas dependências funcionais, a determina b, c e d, então a sozinho já identifica toda a tupla. Além disso, c determina a, e como a determina tudo, c também identifica tudo; por fim, b determina c e, por consequência, b determina a, b, c e d. Resultado: as colunas a, b e c são chaves candidatas. Em termos de restrição de integridade no CREATE TABLE, isso se traduz em constraints UNIQUE sobre cada uma dessas colunas. No banco relacional, UNIQUE garante que não existam dois registros com o mesmo valor na coluna, o que é exatamente o efeito esperado para uma chave candidata simples. Não é preciso juntar colunas em uma chave composta, porque cada uma delas, sozinha, já resolve. Por isso, a alternativa E está correta: UNIQUE(a), UNIQUE(b) e UNIQUE(c). A coluna d não entra isoladamente porque não há nenhuma dependência que permita concluir que d identifica os demais atributos. Em linguagem de normalização, o ponto aqui é reconhecer as chaves candidatas a partir do fecho dos atributos, antes de sair marcando UNIQUE por impulso.