Ответ 1
Мне очень жаль это говорить, но триггеры специально разработаны для такого рода вещей.
(Часть ненависти объясняется тем, что хорошие триггеры очень трудно писать и, конечно же, нельзя отлаживать)
У SQL всегда была отличная возможность: каскадные удаления. Вы планируете это заранее, и когда пришло время что-то удалить, BAM! Не нужно беспокоиться обо всех этих зависимых записях.
Однако в настоящее время он почти запрещает фактически удалять что-либо. Вы отмечаете его как удаленное и прекратите показывать его. К сожалению, я не смог найти твердого решения для этого, когда есть зависимые записи. Я всегда вручную кодировал сложную сеть мягких удалений.
Есть ли лучшее решение, которое я полностью пропустил?
Мне очень жаль это говорить, но триггеры специально разработаны для такого рода вещей.
(Часть ненависти объясняется тем, что хорошие триггеры очень трудно писать и, конечно же, нельзя отлаживать)
Ограничения внешнего ключа могут выполнять каскадные обновления. Если вы привязали свои таблицы как к ключу, так и к флагу удаления, тогда, когда флаг удаления в главной таблице изменился, это изменение распространилось бы до таблицы подробностей. Я этого не пробовал, но он должен работать.
Я думаю, что преимущество мягких удалений обычно заключается в том, что не каждая таблица имеет флаг soft-delete, поэтому количество вещей, необходимых для каскадирования, невелико. Строки просто не используются в базе данных, но не потеряны - на них просто ссылаются только удаленные строки.
Как и все, это зависит от вашей модели.
Не уверен, о каком бэкэнд вы говорите, но вы можете нажать на свой флаг "delete" и изменить каскад с помощью триггера.