Строго погледнато, единственият начин за каскадни стойности като този е чрез използване на ON UPDATE CASCADE. За да направите това , колоната "is_deleted" трябва да бъде част от уникално ограничение.
Само това не е твърде трудно. Ако company.id е вашият първичен ключ, тогава двойката колони {id, is_deleted} също ще бъде уникална. Уникално ограничение за тази двойка колони би ви позволило да извършвате каскадни актуализации чрез препратка към външен ключ.
Но това няма да работи във вашия случай, защото трябва да разрешите стойностите за препратка да бъдат различни от посочените стойности.
Така че във вашия случай мисля, че имате три възможности.
- Задействания
- Запазени процедури
- Код на приложението
Във всички тези случаи трябва да обърнете внимание на разрешенията (вероятно отнемане на разрешенията за изтриване) и на случаите, които могат да избегнат вашия код. Например интерфейсът на командния ред на dbms и GUI интерфейсът могат да се използват за заобикаляне на ограниченията в кода на приложението и, в зависимост от разрешенията, в съхранените процедури.