Auditor de Contas Públicas - Auditoria de Tecnologia da Informação
João precisa criar um esquema normalizado para a tabela R, que contém cinco colunas, que não admitem valores nulos, como ilustrado no esquema abaixo.R (A, B, C, D, E)Sobre essas colunas (ou atributos), João levantou as dependências funcionais seguintes.A -> B B -> C C -> D D -> E D -> A Dentre os esquemas SQL esboçados por João, o que melhor representa a tabela R, com suas restrições, é:
Acreate table R (A int not null unique,B int not null unique,C int not null unique,D int not null unique,E int not null )
Bcreate table R (A int not null,B int not null,C int not null,D int not null,E int not null,primary key (A, B, C, D))
Ccreate table R1 (A int not null,B int not null,C int not null,D int not null,primary key (A, B, C, D))create table R2 (D int not null unique,E int not null)
Dcreate table R1 (A int not null unique,B int not null unique,C int not null unique,D int not null unique)create table R2 (D int not null uniqueE int not null)
Ecreate table R1 (A int not null unique,B int not null unique,C int not null unique)create table R2 (D int not null unique,E int not null)
Revelar gabarito e comentário▾
GabaritoA — create table R (
A int not null unique,
B int not null unique,
C int not null unique,
D int not null unique,
E int not null )
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 e Dependências Funcionais – SQL
Gabarito: letra A. As dependências funcionais A→B, B→C, C→D, D→E e D→A mostram que A, B, C e D são chaves candidatas (cada um determina todos os demais). A tabela está em BCNF, não necessitando decomposição. A melhor representação em SQL é declarar cada chave candidata como UNIQUE e os demais atributos como NOT NULL – exatamente o que a alternativa A faz.
A questão exige análise das dependências funcionais e do conceito de chave candidata.
Critério
Alternativa A (✅ Gabarito)
Alternativa B
Alternativa C
Alternativa D
Alternativa E
Chaves candidatas representadas
A, B, C e D como UNIQUE individuais
Chave primária composta (A,B,C,D)
Chave primária composta (A,B,C,D) em R1
A, B, C, D como UNIQUE individuais em R1
A, B, C como UNIQUE em R1; D como UNIQUE em R2
Atende BCNF (todo determinante é superchave)?
Sim (cada chave candidata é UNIQUE)
Não (chave composta desnecessária; dependências parciais violam 2FN)
Não (mesmo problema da B)
Sim, mas decomposição desnecessária
Não (D ausente em R1 impede junção; perda de informação)
Decomposição necessária?
Não (tabela já em BCNF)
Não (mas mal projetada)
Sim, porém desnecessária e com chave composta errada
Sim, porém desnecessária
Sim, porém incorreta (perde atributo D em R1)
Preserva todos os atributos?
Sim (A,B,C,D,E em uma tabela)
Sim (A,B,C,D,E em uma tabela)
Sim (R1: A,B,C,D; R2: D,E)
Sim (R1: A,B,C,D; R2: D,E)
Não (R1: A,B,C; R2: D,E — falta D em R1)
Simplicidade e correção
Mais simples e direta
Incorreta por chave composta não minimal
Incorreta por chave composta e decomposição desnecessária
Redundante (decompõe sem necessidade)
Incorreta por perda de atributo e impossibilidade de junção
Alternativa A — ✅ Correta ⟵ GABARITO
A tabela R possui as chaves candidatas A, B, C e D (todas determinam todas as demais). Na BCNF, todo determinante deve ser superchave. Portanto, o esquema deve garantir a unicidade de cada chave candidata. A opção A declara cada uma dessas colunas como UNIQUE e NOT NULL, e a coluna E como NOT NULL (não precisa de UNIQUE porque é funcionalmente determinada por D). Isso reflete corretamente as restrições e a normalização máxima.
Alternativa B — ❌ Incorreta
Define uma chave primária composta por (A, B, C, D). Isso é desnecessário e viola a minimalidade da chave, pois cada um desses atributos, individualmente, já é chave candidata. Além disso, uma chave composta com quatro atributos introduz dependências parciais (ex.: A→B faz parte da chave ser suficiente para determinar B), o que conflita com a 2FN.
Alternativa C — ❌ Incorreta
Cria duas tabelas (R1 e R2), mas R1 tem a mesma chave composta errada de (A, B, C, D) da opção B. Além disso, a decomposição não é a melhor porque a relação original já está em BCNF e não precisa ser particionada.
Alternativa D — ❌ Incorreta
Embora a decomposição em R1(A,B,C,D) e R2(D,E) seja sem perdas e cada coluna de R1 seja UNIQUE, essa abordagem é redundante: a tabela original já está normalizada. Entre manter uma única tabela (opção A) e decompor desnecessariamente, a opção A é mais simples e direta. Além disso, R1 não possui chave primária declarada, apenas UNIQUE dispersos.
Alternativa E — ❌ Incorreta
Cria R1 com A, B, C (todos UNIQUE) e R2 com D e E. Falta o atributo D em R1, impossibilitando a junção natural. A tabela original R tem cinco colunas; essa decomposição não permite recuperar a relação original sem produto cartesiano, portanto é uma decomposição com perda.
PEGA ESSA DICA!
Em questões de normalização, identifique primeiro as chaves candidatas pelo fechamento dos atributos. Se todo determinante é chave candidata, a tabela está em BCNF e não precisa ser decomposta. A declaração UNIQUE em SQL é usada para representar chaves candidatas.