Strängt taget är det enda sättet att kaskadera sådana värden genom att använda ON UPDATE CASCADE. För att göra det , kolumnen "is_deleted" måste vara en del av en unik restriktion.
Bara det är inte så svårt. Om company.id är din primära nyckel kommer kolumnparet {id, is_deleted} också att vara unikt. En unik begränsning för det kolumnparet skulle tillåta dig att kaskad uppdateringar genom en främmande nyckelreferens.
Men det kommer inte att fungera i din fall, eftersom du måste tillåta att referensvärden är olika från de refererade värdena.
Så i ditt fall tror jag att du har tre alternativ.
- Utlösare
- Lagrade procedurer
- Ansökningskod
I alla dessa fall måste du vara uppmärksam på behörigheter (förmodligen återkalla raderingsbehörigheter) och fall som kan undvika din kod. Till exempel kan dbms kommandoradsgränssnitt och GUI-gränssnitt användas för att komma runt begränsningar i programkod och, beroende på behörigheter, i lagrade procedurer.