Questão nº 33

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

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

Em banco de dados, os gatilhos são utilizados, entre ou-
tros objetivos, para implementar restrições de integridade.
Considere que em um banco de dados de um banco co-
mercial há duas tabelas, `CLIENTE` (chave primária `CPF`)
e `SERVICO` (chave primária composta por `CPF` e identifi-
cação do serviço), e há a restrição de que um cliente não
pode estar associado a mais de cinco serviços.

Que definição deve ser utilizada para implementar essa
restrição por meio de um gatilho?

Resposta comentada

Gabarito Alternativa C

Conceito-chave: Gatilho (trigger) é um bloco de código que o banco executa automaticamente antes ou depois de um comando INSERT, UPDATE ou DELETE. Para impedir uma violação de regra, o gatilho deve rodar antes da inserção do dado que pode causar o problema — nesse caso, antes de inserir um novo serviço, pois é aí que se conta quantos o cliente já tem.

  • (A) Incorreta: BEFORE INSERT ON CLIENTE dispara quando um cliente é criado, mas a restrição é sobre a associação a serviços, não sobre a existência do cliente — e nesse momento ainda não há serviços vinculados.
  • (B) Incorreta: AFTER INSERT ON CLIENTE também não ajuda, pois o problema só aparece quando um serviço é adicionado, e não quando o cliente é cadastrado.
  • (C) Correta: BEFORE INSERT ON SERVICO é o gabarito: antes de inserir um novo serviço, o gatilho conta quantos serviços aquele CPF já tem na tabela SERVICO; se já houver 5, ele aborta a inserção (ex.: RAISE EXCEPTION). Isso impede a violação na origem.
  • (D) Incorreta: AFTER INSERT ON SERVICO já deixaria o dado gravado; seria preciso fazer um ROLLBACK ou deletar o registro, o que é mais frágil e ineficiente — a validação deve ser preventiva, não corretiva.
  • (E) Incorreta: WHEN CLIENTE INSERT ON SERVICO não é sintaxe válida de gatilho em SQL padrão; não existe essa cláusula para disparar eventos entre tabelas diferentes.

Armadilha do distrator mais tentador (D): A banca quer que você pense que "depois de inserir, eu verifico e apago se passar de 5". Isso até funcionaria, mas é ruim: o dado já foi gravado, gerando trabalho extra e risco de inconsistência temporária. A pegadinha é que o comando BEFORE é semanticamente mais correto para restrições de integridade, pois bloqueia a operação antes que o erro aconteça.

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