В проекте, над которым я работаю, у нас есть несколько таблиц с многочисленными связями с внешним ключом, и, поскольку он находится на ранней стадии разработки, число связей, вероятно, изменится.
Мы хотели бы иметь возможностьчтобы удалить записи из определенных таблиц, но не желают устанавливать каскадные удаления для отношений внешнего ключа.
Мы рассмотрели следующие варианты:
- Игнорируем наши инстинкты и настраиваем каскадированиеудаляет в любом случае
- Вместо каскадного удаления используйте значение null
- Пишите и поддерживайте пользовательский сценарий для удаления всех записей внешнего ключа вручную
Ни одна из этих опций не являетсяотлично: - (
- Мы не хотим устанавливать каскадное удаление, потому что не хотим, чтобы это было поведением по умолчанию.
- Мы не хотим использовать каскадированиеnull, потому что оставлять много сирот было бы бесполезно.
- Написание нестандартного сценария работало бы, но это не очень масштабируемое и не обслуживаемое. Написание сценария за грехХороший стол или даже несколько столов в порядке, но для каждого стола?Шутки в сторону?Должен быть лучший способ!По крайней мере, я надеюсь есть лучший способ.
Для толпы "Слишком долго не читал";Краткое резюме
Есть ли способ указать, что вы хотите удалить каскадно, на основе запроса к запросу?
Возможно, что-то похожее на это:
-- wouldn't it be nice if this was a real command!
CASCADE DELETE FROM MyTable WHERE ID = @ID