Questão nº 52

Questão de Tecnologia da Informação · CESGRANRIO BASA 02/2021 (nº 52)

CESGRANRIO2021Técnico Científico - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Dver comentário ↓

As tabelas a seguir fazem parte do banco de dados da área de recursos humanos de uma empresa. Elas registram os
dados referentes aos empregados e aos seus dependentes.

CREATE TABLE EMPREGADO (
     MATRICULA     INTEGER    NOT NULL,
     NOME          TEXT       NOT NULL,
     DATA_NASC     TEXT       NOT NULL,
     CERT_RESRV    INTEGER    UNIQUE NULL,
     PRIMARY KEY (MATRICULA));

CREATE TABLE DEPENDENTE (
     MAT_EMP     INTEGER    NOT NULL,
     NUM_SEQ     INTEGER    NOT NULL,
     NOME        TEXT       NOT NULL,
     DATA_NASC   TEXT       NOT NULL,
     PRIMARY KEY (MAT_EMP, NUM_SEQ)
     FOREIGN KEY (MAT_EMP)
          REFERENCES EMPREGADO (MATRICULA));

O estado corrente desse banco de dados é exibido nas figuras abaixo.

Figura da questão de Tecnologia da Informação

Figura da questão de Tecnologia da Informação

Qual comando INSERT irá falhar, na tentativa de incluir uma nova linha em uma das tabelas desse banco de dados?

Resposta comentada

Gabarito Alternativa D

Conceito-chave: Em SQL, a ordem e a quantidade de valores no INSERT devem corresponder exatamente à estrutura da tabela. Se você omitir uma coluna, o banco tentará usar o valor padrão (NULL ou o definido), mas se a coluna não tiver valor padrão e for NOT NULL, o comando falha. A pegadinha aqui é que a tabela EMPREGADO tem 4 colunas (MATRICULA, NOME, DATA_NASC, CERT_RESRV), e a alternativa D só fornece 3 valores, tentando inserir sem o campo CERT_RESRV, que é opcional (aceita NULL), mas a sintaxe está errada porque não especifica as colunas.

  • (A) Incorreta: O INSERT especifica as colunas e fornece 4 valores, incluindo NUM_SEQ=00 (que é válido, pois é inteiro) e MAT_EMP=11111 (que existe na tabela EMPREGADO). A função datetime() gera texto válido para DATA_NASC. A ordem das colunas na lista é respeitada, então não há erro.
  • (B) Incorreta: A ordem das colunas na lista é diferente da ordem na tabela, mas como o INSERT nomeia explicitamente as colunas (NOME, DATA_NASC, NUM_SEQ, MAT_EMP), os valores são mapeados corretamente. O MAT_EMP=11111 existe, e o NUM_SEQ=3 é válido. Não há violação de chave estrangeira nem de chave primária.
  • (C) Incorreta: O INSERT fornece 4 valores na ordem correta da tabela (MATRICULA, NOME, DATA_NASC, CERT_RESRV). O CERT_RESRV é NULL, que é permitido (a coluna aceita NULL). A matrícula 55555 é nova, então não viola a chave primária.
  • (D) Correta: Este comando omite a coluna CERT_RESRV e não especifica a lista de colunas. O SQL espera 4 valores (pois a tabela tem 4 colunas), mas recebe apenas 3. Isso gera erro de sintaxe/contagem de valores, pois o banco não sabe como preencher a coluna faltante sem um valor padrão explícito. Armadilha da banca: o aluno pode pensar que, como CERT_RESRV aceita NULL, o banco preencheria automaticamente, mas sem a lista de colunas, o INSERT exige o valor para todas as colunas, mesmo que seja NULL escrito explicitamente.
  • (E) Incorreta: O INSERT fornece 4 valores, incluindo CERT_RESRV como string vazia ''. Isso é aceito, pois a coluna é TEXT e aceita qualquer texto (inclusive vazio). A matrícula 44444 é nova, então não viola a chave primária.

Fonte: CESGRANRIO BASA 02/2021 Técnico Científico - Tecnologia da Informação. Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho