Какие плюсы и минусы каскадного удаления и обновления? - PullRequest
7 голосов
/ 26 августа 2010

Может быть, это наивный вопрос ... но я думаю, что у нас всегда должны быть каскадные удаления и обновления. Но я хотел знать, есть ли проблемы с этим и когда мы не должны делать это? Я действительно не могу вспомнить случай, когда вы не хотели бы делать каскадное удаление, но я уверен, что есть один ... но как насчет обновлений, которые они должны делать всегда?

Так может кто-нибудь перечислить плюсы и минусы каскадного удаления и обновления? Спасибо.

Ответы [ 4 ]

9 голосов
/ 27 августа 2010

Плюсы:

  • При удалении строки из родительской таблицы удаляются все строки внешнего ключа
  • Обычно это быстрее, чем реализовать это с помощью триггеров
  • Сиротливые строки маловероятны

Минусы

  • Возможны сироты
  • Если по ошибке вы удалите строку в родительской таблице, все строки в соответствующейдочерние таблицы будут удалены, и это будет PITA, чтобы выяснить, что вы удалили
7 голосов
/ 27 августа 2010

Это зависит от сущностей, содержащихся в таблицах: если сторона внешнего ключа не может существовать без стороны первичного ключа, имеет смысл иметь каскадное удаление.

E.g .: Позиция счета-фактуры не имеет права на выживание, если счет удален.

Но если у вас есть внешний ключ, используемый для отношения, «работает» для отношений между сотрудником и его / ееее босс, не хотите ли удалить сотрудника, если босс уйдет из компании?

Кроме того: техническая проблема заключается в том, что некоторые инструменты ORM (объектно-реляционное сопоставление) перепутаны, если записи зависимых таблиц изменяются без ответственностиза это.

1 голос
/ 27 августа 2010

Плюсы:

  • Целостность данных - может помочь избежать ситуаций, когда запись ссылается на то, чего больше нет.

Минусы:

  • Производительность - Каскадные удаления / обновления могут быть sloooooooooooooooooooow.
  • Сложность. Кажется, большинство людей, с которыми я работаю, не привыкли к каскадам, поэтому, когда вы даете им новый проект, в котором он есть, они немного удивляются, когда в первый раз запускают один из этих каскадов.
  • Как уже упоминали другие, может действительно испортить вещи при неправильном использовании.
0 голосов
/ 07 января 2011

Pro: позволяет сократить количество операторов SQL, необходимых для выполнения действий по удалению.

Con: вы можете удалить данные, которые могут быть важны для аудита в более позднее время. Поэтому важно сохранить его, даже если родительская строка была удалена. В этом случае внешний ключ должен получить значение NULL, например.

...