Strikt genomen is de enige manier om dergelijke waarden te cascaderen, door ON UPDATE CASCADE te gebruiken. Om dat te doen , moet de kolom "is_deleted" deel uitmaken van een unieke beperking.
Dat alleen is niet zo moeilijk. Als company.id uw primaire sleutel is, is het paar kolommen {id, is_deleted} ook uniek. Een unieke beperking op dat paar kolommen zou u in staat stellen om updates trapsgewijs te laten verlopen via een refererende sleutelreferentie.
Maar dat werkt niet in uw geval, omdat u moet toestaan dat verwijzingswaarden verschillend zijn van de waarden waarnaar wordt verwezen.
Dus in jouw geval denk ik dat je drie opties hebt.
- Triggers
- Opgeslagen procedures
- Applicatiecode
In al die gevallen moet u aandacht besteden aan machtigingen (waarschijnlijk het intrekken van verwijderingsmachtigingen) en aan gevallen die uw code kunnen vermijden. De dbms-opdrachtregelinterface en GUI-interface kunnen bijvoorbeeld worden gebruikt om beperkingen in toepassingscode en, afhankelijk van machtigingen, in opgeslagen procedures te omzeilen.