Каковы плюсы и минусы каскадного удаления и обновления?


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

Итак, может ли кто-нибудь перечислить плюсы и минусы каскадных удалений и обновлений ? Спасибо.

4 5

4 ответа:

Плюсы:

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

Минусы

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

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

Например: строка счета-фактуры не имеет права на сохранение, если счет-фактура удалена.

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

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

Плюсы:

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

Минусы:

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

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

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