Dúvidas do Aluno – Questão (SQL)

Por
Atualizado em
Publicado em
1 min. de leitura

Olá, pessoal do Gran Cursos!
Aqui é o Prof. Washington Almeida e hoje vamos esclarecer uma dúvida muito comum em SQL que surgiu em nossa Questão 19 sobre exclusão de dados em tabelas com restrições de integridade.

A Questão

Ano: 2018 Banca: CESPE / CEBRASPE Órgão: Polícia Federal Prova: CESPE – 2018 – Polícia Federal – Perito Criminal Federal – Área 3

O comando SQL a seguir permite apagar o conteúdo da tabela colaborador_organograma.
delete from colaborador_organograma;

Texto, Carta

O conteúdo gerado por IA pode estar incorreto.” À primeira vista, parece simples: DELETE remove registros da tabela informada. Porém, no banco de dados, temos regras de integridade referencial (foreign keys) que podem impedir a exclusão.

Estrutura das Tabelas

– organograma: guarda os cargos e hierarquia.
– colaborador: guarda os colaboradores, identificados por CPF.
– colaborador_organograma: é a tabela associativa que liga colaborador a organograma, armazenando nomeação e exoneração.

Essa última tabela possui chaves estrangeiras para colaborador e organograma:

foreign key (cpf) references colaborador,
foreign key (cargo) references organograma(id)

O Problema

Quando tentamos apagar os registros de colaborador_organograma, o banco pode recusar se houver regras ON DELETE RESTRICT ou se o SGBD exigir ordem lógica de exclusão. Isso acontece porque a tabela está amarrada às tabelas principais.

Como Resolver

Existem três caminhos principais:

1. Excluir primeiro os registros filhos (colaborador_organograma).
  – Primeiro limpamos colaborador_organograma.
  – Depois, se necessário, podemos remover registros de colaborador e organograma.

2. Usar TRUNCATE com CASCADE (em SGBDs que suportam, como PostgreSQL e Oracle):

truncate table colaborador_organograma cascade;

3. Configurar ON DELETE CASCADE nas constraints, assim os vínculos são removidos automaticamente:

alter table colaborador_organograma
add constraint fk_colaborador_organograma_cpf
foreign key (cpf) references colaborador(cpf)
on delete cascade;

Script Didático – Exclusão em Ordem Correta

Para a situação da questão, o script correto para apagar todos os vínculos seria:

— 1. Apagar todos os vínculos entre colaboradores e organograma
delete from colaborador_organograma;

— 2. (Opcional) Apagar os colaboradores
delete from colaborador;

— 3. (Opcional) Apagar os cargos do organograma
delete from organograma;

Conclusão

A questão mostra que nem sempre um comando simples funciona no mundo real. É fundamental entender a ordem de exclusão e como funcionam as chaves estrangeiras.

– Se quiser flexibilidade: use ON DELETE CASCADE.
– Se quiser controle total: siga a ordem lógica de exclusão manual.


✍️ Prof. Washington Almeida
Gran Cursos – Banco de Dados / SQL

Por
Atualizado em
Publicado em
1 min. de leitura