PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Methode zum Kaskadieren vorläufiger Löschungen in Eltern-Kind-Beziehungen

Genau genommen ist die einzige Möglichkeit, solche Werte zu kaskadieren, die Verwendung von ON UPDATE CASCADE. Um das zu tun , muss die Spalte "is_deleted" Teil einer eindeutigen Einschränkung sein.

Das allein ist nicht allzu schwer. Wenn company.id Ihr Primärschlüssel ist, dann ist auch das Spaltenpaar {id, is_deleted} eindeutig. Eine eindeutige Einschränkung für dieses Spaltenpaar würde es Ihnen ermöglichen, Aktualisierungen über eine Fremdschlüsselreferenz zu kaskadieren.

Aber das funktioniert nicht in Ihrem Fall, weil Sie zulassen müssen, dass Referenzwerte anders sind aus den referenzierten Werten.

In Ihrem Fall haben Sie also meiner Meinung nach drei Möglichkeiten.

  • Auslöser
  • Gespeicherte Prozeduren
  • Anwendungscode

In all diesen Fällen müssen Sie auf Berechtigungen (wahrscheinlich Widerrufen von Löschberechtigungen) und auf Fälle achten, die Ihren Code umgehen können. Beispielsweise können die dbms-Befehlszeilenschnittstelle und die GUI-Schnittstelle verwendet werden, um Beschränkungen im Anwendungscode und, je nach Berechtigungen, in gespeicherten Prozeduren zu umgehen.