PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Método para cascata de exclusões reversíveis em relacionamentos pai-filho


Estritamente falando, a única maneira de cascatear valores como esse é usando ON UPDATE CASCADE. Para fazer isso , a coluna "is_deleted" deve fazer parte de uma restrição exclusiva.

Só isso não é muito difícil. Se company.id for sua chave primária, o par de colunas {id, is_deleted} também será exclusivo. Uma restrição exclusiva nesse par de colunas permitiria a cascata de atualizações por meio de uma referência de chave estrangeira.

Mas isso não funcionará em seu caso, porque você precisa permitir que os valores de referência sejam diferentes dos valores referenciados.

Então, no seu caso, acho que você tem três opções.
  • Acionadores
  • Procedimentos armazenados
  • Código do aplicativo

Em todos esses casos, você precisa prestar atenção nas permissões (provavelmente revogando permissões de exclusão) e nos casos que podem evitar seu código. Por exemplo, a interface de linha de comando dbms e a interface GUI podem ser usadas para contornar restrições no código do aplicativo e, dependendo das permissões, em procedimentos armazenados.