Pular para o conteúdo principal

Questão de Banco de Dados — Conceitos e Fundamentos de Modelo Relacional — FGV 2024

Banco de DadosConceitos e Fundamentos de Modelo Relacional
Código
fg165291
Banca
FGV
Órgão
DATAPREV
Ano
2024
Cargo
Ana TI ( )

ATENÇÃO:

 

O texto a seguir deve ser usado para a próxima questão.


O esquema de um banco de dados relacional, especificado pelos comandos SQL a seguir, atenderá às consultas

 

create table candidato
(
    num_inscr    int         primary key,
    cpf_cand     char(11)    unique,
    nome         varchar(30)
);

create table questao
(
    id           int         primary key,
    texto        varchar(20) not null,
    gabarito     char(1)     check (gabarito in ('A','B','C','D','E'))
);

create table candidato_questao
(
    num_cand     int,
    cpf_cand     char(11),
    id_quest     int,
    opcao_mar    char(1),
    primary key(num_cand,id_quest),
    unique(cpf_cand,id_quest),
    foreign key(num_cand) references candidato,
    foreign key(cpf_cand) references candidato(cpf_cand),
    foreign key(id_quest) references questao
);

 

Nesse contexto, é correto afirmar que

  1. Aa especificação da restrição imposta sobre o atributo cpf_cand da relação candidato produzirá erro de compilação, pois há a demanda pela especificação da cláusula CONSTRAINT.
  2. Ba existência do atributo cpf_cand na relação candidato_questao viola, nessa relação, a segunda forma normal.
  3. Ca restrição de integridade referencial imposta sobre o atributo cpf_cand da tabela candidato_questao é conflitante com a definição de chave primária da relação.
  4. Da restrição de verificação imposta sobre o atributo gabarito da relação questao permite troca direta entre os predicados IN e EXISTS.
  5. Eo atributo cpf_cand é um atributo principal da superchave mínima A= {cpf_cand, id_quest} da relação candidato_questao.
Revelar gabarito e comentário

GabaritoE — o atributo cpf_cand é um atributo principal da superchave mínima A= {cpf_cand, id_quest} da relação candidato_questao.

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”.

Modelo Relacional: chaves, superchaves e atributos principais

Gabarito: letra E. O atributo cpf_cand é um atributo principal da superchave mínima A = {cpf_cand, id_quest} da relação candidato_questao, pois essa superchave é uma chave candidata (e, na verdade, a chave primária composta da relação), e todo atributo que compõe uma chave candidata é, por definição, um atributo principal. As demais alternativas apresentam erros conceituais ou de interpretação do esquema SQL fornecido.

O modelo relacional organiza os dados em relações (tabelas), e a identificação de tuplas (linhas) é feita por chaves. Uma superchave é qualquer conjunto de atributos que identifica unicamente uma tupla; uma chave candidata é uma superchave mínima, ou seja, não contém um subconjunto próprio que também seja superchave; a chave primária é a chave candidata escolhida pelo projetista. Atributos que pertencem a alguma chave candidata são chamados de atributos principais (ou primos). No esquema dado, a relação candidato_questao tem chave primária composta (num_cand, id_quest) e também uma restrição unique(cpf_cand, id_quest), o que torna {cpf_cand, id_quest} uma chave candidata — logo, cpf_cand é um atributo principal.

A alternativa E está correta porque {cpf_cand, id_quest} é uma superchave mínima (nenhum subconjunto próprio — {cpf_cand} ou {id_quest} — é superchave, pois cpf_cand não é único isoladamente e id_quest também não), e cpf_cand faz parte dela. As demais alternativas falham: a restrição unique não exige cláusula CONSTRAINT explícita (A); a presença de cpf_cand em candidato_questao não viola a 2FN, pois ele é parte de uma chave candidata (B); a chave estrangeira cpf_cand não conflita com a chave primária (C); e a restrição check não tem relação com IN/EXISTS (D).

Alternativa A — ❌ Incorreta

A restrição unique sobre cpf_cand em candidato é perfeitamente válida sem a cláusula CONSTRAINT explícita. Em SQL, UNIQUE é uma restrição de integridade que pode ser declarada inline (como no exemplo) ou com nome opcional via CONSTRAINT nome ... UNIQUE. A ausência do nome não gera erro de compilação; o SGBD atribui um nome automático. A alternativa confunde a necessidade de nomear a restrição com a necessidade de declará-la.

Alternativa B — ❌ Incorreta

A Segunda Forma Normal (2FN) exige que todo atributo não-chave dependa da chave primária inteira, não de parte dela. Em candidato_questao, cpf_cand é parte de uma chave candidata ({cpf_cand, id_quest}), portanto é um atributo principal, não um atributo não-chave. A 2FN não se aplica a atributos que pertencem a chaves candidatas. A presença de cpf_cand não viola a 2FN; na verdade, a relação está em 2FN (e provavelmente em 3FN, pois não há dependências transitivas).

Alternativa C — ❌ Incorreta

A chave estrangeira cpf_cand em candidato_questao referencia a coluna cpf_cand da tabela candidato, que possui restrição UNIQUE. Isso é perfeitamente válido: uma chave estrangeira pode referenciar qualquer coluna com restrição UNIQUE ou PRIMARY KEY. Não há conflito com a definição de chave primária da relação candidato_questao (que é (num_cand, id_quest)). A alternativa sugere um conflito inexistente.

Alternativa D — ❌ Incorreta

A restrição CHECK (gabarito in ('A','B','C','D','E')) valida que o valor de gabarito pertença ao conjunto listado. Os predicados IN e EXISTS são usados em consultas SQL (subconsultas), não em restrições CHECK. Não há qualquer relação entre a restrição de verificação e a troca entre IN e EXISTS; são conceitos de domínios diferentes. A alternativa mistura indevidamente restrição de domínio com operadores de consulta.

Alternativa E — ✅ Correta ⟵ GABARITO

A relação candidato_questao possui a chave primária (num_cand, id_quest) e a restrição UNIQUE (cpf_cand, id_quest). O conjunto {cpf_cand, id_quest} é uma superchave mínima: é superchave (identifica unicamente cada tupla, pois cpf_cand é único em candidato e id_quest é único em questao, e a combinação é única por restrição) e é mínima (nenhum subconjunto próprio — {cpf_cand} ou {id_quest} — é superchave, pois cpf_cand pode se repetir em candidato_questao e id_quest também). Portanto, é uma chave candidata, e cpf_cand é um atributo principal dessa chave. A alternativa está correta.

Gabarito: letra E

Link permanente: /questoes/fg165291