Questão nº 52
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 52)
Considere um esquema relacional criado com o seguinte script SQL.
```
create table E1(
a int not null primary key,
b int not null)
create table E2(
c int not null,
d int not null
foreign key references E1(a))
```
Para evitar a introdução de erros de integridade na tabela E2 decorrentes da remoção de registros da tabela E1, a cláusula complementar na definição da chave estrangeira seria:
- Ano action;
- Bon delete cascade; (alternativa correta)
- Con delete raiserror;
- Don delete restrict;
- Eset null.
Resposta comentada
Gabarito Alternativa B
A integridade referencial é um conjunto de regras que garantem que os relacionamentos entre tabelas em um banco de dados sejam válidos, ou seja, que uma chave estrangeira (FK) sempre referencie uma chave primária (PK) existente ou seja nula. A cláusula ON DELETE define o que acontece com os registros filhos quando o registro pai correspondente é excluído.
- (A) Incorreta:
ON DELETE NO ACTIONimpede a exclusão do registro pai se houver registros filhos referenciando-o, a menos que a exclusão dos filhos seja feita explicitamente antes. Isso evita o erro, mas não é o comportamento de "cascata" implícito na resposta. - (B) Correta:
ON DELETE CASCADEsignifica que, se um registro da tabela pai (E1) for excluído, todos os registros correspondentes na tabela filha (E2) que o referenciam também serão automaticamente excluídos. Isso evita a introdução de erros de integridade, pois não haverá registros filhos "órfãos" apontando para um pai inexistente. - (C) Incorreta:
ON DELETE RAISERRORnão é uma cláusula SQL padrão para chaves estrangeiras.RAISERRORé uma função específica do SQL Server para gerar mensagens de erro, não uma ação de integridade referencial. - (D) Incorreta:
ON DELETE RESTRICTé semelhante aNO ACTION(e, em muitos SGBDs, são sinônimos). Ela impede a exclusão do registro pai se houver registros filhos que o referenciam. Isso evita o erro, mas não é a ação de propagação da exclusão. - (E) Incorreta:
ON DELETE SET NULLdefine o valor da chave estrangeira nos registros filhos comoNULLquando o registro pai é excluído. No entanto, a colunadna tabelaE2, que é a chave estrangeira, foi definida comoNOT NULL. Portanto, esta opção não é válida para este esquema, pois tentaria atribuirNULLa uma coluna que não permite valores nulos, causando um erro. Esta é a armadilha da banca.
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.