Ściśle mówiąc, jedynym sposobem na kaskadowanie wartości jest użycie opcji ON UPDATE CASCADE. Aby to zrobić to , kolumna „is_deleted” musi być częścią unikatowego ograniczenia.
Samo to nie jest zbyt trudne. Jeśli company.id jest Twoim kluczem podstawowym, para kolumn {id, is_deleted} również będzie unikalna. Unikalne ograniczenie dla tej pary kolumn pozwoliłoby na kaskadowe aktualizacje poprzez odwołanie do klucza obcego.
Ale to nie zadziała w Twoim przypadku, ponieważ musisz zezwolić na wartości odniesienia różne z wartości odniesienia.
Więc w twoim przypadku myślę, że masz trzy opcje.
- Wyzwalacze
- Procedury przechowywane
- Kod aplikacji
We wszystkich tych przypadkach należy zwrócić uwagę na uprawnienia (prawdopodobnie odwołanie uprawnień do usuwania) oraz na przypadki, w których można uniknąć kodu. Na przykład interfejs wiersza poleceń dbms i interfejs GUI można wykorzystać do obejścia ograniczeń w kodzie aplikacji i, w zależności od uprawnień, w procedurach składowanych.