Questão nº 49
Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2018 (nº 49)
Considere que, em um modelo relacional, há duas tabelas bem formadas denominadas Pessoa e Projeto. Os atributos de Pessoa são CPF (PK), nome, endereço e o código do projeto no qual ela trabalha (FK); os atributos de Projeto são código (PK), título e data de início. Considere também que existe uma regra de negócio que determina que, em um projeto, não possam trabalhar mais do que 15 pessoas.
Um gatilho, criado para garantir que essa regra de negócio seja permanentemente observada, deve ser programado para ser executado
- Aantes de cada inserção ou alteração de linhas na tabela Pessoa (alternativa correta)
- Bantes de cada inserção ou remoção de linhas na tabela Projeto
- Cantes de cada inserção ou alteração de linhas na tabela Projeto
- Ddepois de cada inserção de linhas na tabela Pessoa
- Edepois de cada alteração de linhas na tabela Projeto
Resposta comentada
Gabarito Alternativa A
-
Conceito-chave: Um gatilho (trigger) é um código que o banco executa automaticamente antes ou depois de um evento (INSERT, UPDATE, DELETE). Para impedir que uma regra seja violada, o gatilho deve rodar antes da operação, pois assim ele pode "cancelar" a inserção/atualização se a regra for quebrada. Aqui, a regra limita o número de pessoas por projeto, e quem insere/altera pessoas é a tabela Pessoa (a FK aponta para Projeto).
-
(A) Correta: É o gabarito. O gatilho deve rodar antes de inserir ou alterar uma linha em Pessoa, pois é nesse momento que se sabe para qual projeto a pessoa vai (ou está indo). Ele conta quantas pessoas já estão naquele projeto e, se já houver 15, impede a operação (com
RAISE EXCEPTIONou similar). Rodar "depois" não impediria a violação, só registraria o erro. -
(B) Incorreta: Inserir ou remover linhas em Projeto não altera a quantidade de pessoas trabalhando nele. A regra é sobre pessoas por projeto, não sobre a existência do projeto em si.
-
(C) Incorreta: Alterar linhas em Projeto (ex.: mudar título ou data) não muda quantas pessoas estão alocadas. A FK está em Pessoa, não em Projeto.
-
(D) Incorreta: É o distrator mais tentador. A armadilha: "depois de inserir" parece lógico, mas um gatilho
AFTER INSERTsó roda após a linha já ter sido gravada. Se a regra for violada, o banco não pode "desfazer" automaticamente a inserção sem um rollback explícito — e a regra de negócio exige impedir a violação, não apenas detectá-la depois. Além disso, um gatilhoAFTERnão cobre a alteração (UPDATE) de Pessoa, que também pode mover alguém para um projeto lotado. -
(E) Incorreta: Alterar Projeto não afeta a contagem de pessoas. A regra só se aplica quando uma pessoa é inserida ou muda de projeto (via UPDATE em Pessoa).
Fonte: CESGRANRIO BASA 01/2018 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.