PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Méthode de suppression réversible en cascade dans les relations parent-enfant

À proprement parler, la seule façon de cascader des valeurs comme celle-ci est d'utiliser ON UPDATE CASCADE. Pour faire ça , la colonne "is_deleted" doit faire partie d'une contrainte unique.

Cela seul n'est pas trop difficile. Si company.id est votre clé primaire, alors la paire de colonnes {id, is_deleted} sera également unique. Une contrainte unique sur cette paire de colonnes vous permettrait de cascader les mises à jour via une référence de clé étrangère.

Mais cela ne fonctionnera pas dans votre cas, car vous devez autoriser les valeurs de référence à être différentes à partir des valeurs référencées.

Donc, dans votre cas, je pense que vous avez trois options.

  • Déclencheurs
  • Procédures stockées
  • Code d'application

Dans tous ces cas, vous devez faire attention aux autorisations (probablement en révoquant les autorisations de suppression) et aux cas qui peuvent éviter votre code. Par exemple, l'interface de ligne de commande et l'interface graphique dbms peuvent être utilisées pour contourner les contraintes dans le code de l'application et, selon les autorisations, dans les procédures stockées.