Questão nº 47
Questão de Tecnologia da Informação · FGV DATAPREV 2024 (nº 47)
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_marc 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
- 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.
- Ba existência do atributo cpf_cand na relação candidato_questao viola, nessa relação, a segunda forma normal.
- 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.
- Da restrição de verificação imposta sobre o atributo gabarito da relação questao permite troca direta entre os predicados IN e EXISTS.
- Eo atributo cpf_cand é um atributo principal da superchave mínima A = {cpf_cand, id_quest} da relação candidato_questao. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
O conceito-chave aqui é a chave em bancos de dados relacionais, que é um conjunto de atributos que identifica unicamente uma linha (tupla) em uma tabela. Uma superchave é um conjunto de atributos que garante a unicidade; uma chave candidata é uma superchave mínima (não se pode remover nenhum atributo e ainda manter a unicidade); e um atributo principal (ou primo) é qualquer atributo que faz parte de alguma chave candidata.
- A) Incorreta: A sintaxe
cpf_cand char(11) unique,é perfeitamente válida em SQL para definir uma restrição de unicidade diretamente na coluna. A cláusulaCONSTRAINTé opcional para restrições de coluna simples. - B) Incorreta: A Segunda Forma Normal (2FN) proíbe dependências funcionais parciais de atributos não-chave em relação à chave primária composta. Na tabela
candidato_questao, o atributocpf_candnão é um atributo não-chave; ele faz parte de uma chave candidata (cpf_cand,id_quest). Portanto, sua existência não viola a 2FN. - C) Incorreta: A restrição
foreign key(cpf_cand) references candidato(cpf_cand)é válida e não conflitante. SQL permite que chaves estrangeiras referenciem colunas que possuem uma restriçãoUNIQUE(chaves candidatas) na tabela referenciada, não apenas a chave primária. A chave primária decandidato_questaoé(num_cand, id_quest), e a chave estrangeira emcpf_candé uma restrição independente. - D) Incorreta: Os predicados
INeEXISTStêm finalidades e sintaxes distintas.INverifica se um valor está em uma lista de valores ou no resultado de uma subconsulta, enquantoEXISTSverifica a existência de linhas retornadas por uma subconsulta. Não há uma "troca direta" entre eles neste contexto de restriçãoCHECKcom uma lista literal. - (E) Correta: Na tabela
candidato_questao,A = {cpf_cand, id_quest}é definida comoUNIQUE, o que a torna uma chave candidata (e, portanto, uma superchave mínima). Um atributo principal (ou primo) é qualquer atributo que faz parte de qualquer chave candidata. Comocpf_candé um dos atributos que compõem a chave candidataA, ele é, por definição, um atributo principal dessa superchave mínima.
Fonte: FGV DATAPREV 2024 Analista de Tecnologia da Informação - Arquitetura, Engenharia e Sustentação Tecnológica (Caderno Tipo 1). Reproduzida para fins de estudo.