Каковы плюсы и минусы каскадного удаления и обновления?
Может быть, это какой-то наивный вопрос...но я думаю, что у нас всегда должны быть каскадные удаления и обновления. Но я хотел бы знать, есть ли проблемы с этим, и когда мы не должны этого делать? Я действительно не могу сейчас придумать случай, когда вы не хотели бы сделать каскадное удаление, но я уверен, что оно есть...но как насчет обновлений, которые должны быть сделаны всегда?
Итак, может ли кто-нибудь перечислить плюсы и минусы каскадных удалений и обновлений ? Спасибо.
4 ответа:
Плюсы:
- при удалении строки из родительской таблицы удаляются все строки внешнего ключа
- это обычно быстрее, чем реализовать это с помощью триггеров
- осиротевшие строки маловероятны
Минусы
- сироты возможны
- Если по ошибке вы удалите строку в родительской таблице, все строки в соответствующих дочерних таблицах будут удалены, и это будет Пита, чтобы выяснить, что вы удалили
Это зависит от сущностей, содержащихся в таблицах: если сторона внешнего ключа не может существовать без стороны первичного ключа, имеет смысл каскадное удаление.
Например: строка счета-фактуры не имеет права на сохранение, если счет-фактура удалена.
Но если у вас есть внешний ключ, используемый для отношений "работает для" для отношений между сотрудником и его / ее боссом, вы хотите удалить сотрудника, если босс покидает компания?
Кроме того: техническая проблема заключается в том, что некоторые инструменты ORM (object relational mapping) путаются, если зависимые записи таблицы изменяются без их ответственности за это.
Плюсы:
Целостность данных-может помочь избежать ситуаций, когда запись ссылается на что-то, чего больше нет.
Минусы:
- производительности - каскадное удаление/обновление может быть sloooooooooooooooooooow.
- сложность-похоже, большинство людей, с которыми я работаю, не привыкли к каскадам, поэтому, когда вы даете им новый проект, у которого он есть, они немного удивляются, когда в первый раз запускают один из этих каскадов.
- Как уже упоминали другие, может действительно испортить вещи, когда используется неправильно.
Pro: это позволяет уменьшить количество инструкций SQL, необходимых для выполнения действий удаления.
Con: вы можете удалить данные, которые в какой-то степени могут быть важны для аудита в более позднее время. Поэтому важно сохранить его, даже если родительская строка была удалена. В этом случае внешний ключ должен получить, например, значение NULL.