1
resposta

Sobre segurança de dados

Não deixa de ser irônico que o SGBD tenha essa segurança de integridade referencial pra impedir a exclusão de uma linha quando existem tabelas que a referenciam em modo RESTRICT, mas permite tranquilamente que um DROP TABLE mande os dados pelos ares sem a menor cerimônia, rss. Na minha opinião o administrador do BD deveria ao menos ter que executar antes um ALTER TABLE pra colocar em modo CASCADE pra só depois permitir a remoção da tabela "pai".

1 resposta

Oi, Paulo! Tudo bem?

Desde já, peço desculpas pela demora em te responder.

Muito pertinente o que você falou!

A cláusula RESTRICT se faz necessária para impedir que registros de uma tabela mãe sejam excluídos caso possuam alguma referência na tabela filha, evitando possíveis lacunas e problemas de integridade no nosso banco de dados.

Quando falamos sobre a exclusão de uma tabela mãe, o PostgreSQL também possui uma lógica semelhante, proibindo que esta seja excluída caso se relacione com outra tabela, olha só:

Após criar as tabelas clientes e pedidos (que possui uma chave estrangeira referente à clientes) e tentar excluir clientes, temos como retorno a mensagem abaixo:

Retorno da execução do comando DROP TABLE no PostgreSQL

Traduzindo, a mensagem acima diz:

  • ERRO: não é possível descartar a tabela clientes porque outros objetos dependem dela
  • DETALHE: restrição pedidosclienteidfkey na tabela pedidos dependem da tabela clientes
  • DICA: Use DROP ... CASCADE para descartar os objetos dependentes também.

Assim, percebe-se que há um impedimento de excluir a tabela mãe por conta da restrição de chave estrangeira!

Paulo, talvez em seu contexto esse procedimento não tenha acontecido, contudo, isso se trata de um padrão do PostgreSQL. Qualquer dúvida, estarei aqui para conversarmos!

Abraço.