Почему у нас не может быть нескольких каскадных путей?

9

Вы можете видеть, что было задано много вопросов о нескольких каскадных путях . Например:

/programming/851625/foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths

/programming/6065501/multiple-cascade-delete-path-in-many-many-relationship-ef-4-1

/programming/27613117/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths-s

Однако из того, что я вижу и понимаю, вполне нормально, что вы хотите удалить дочернюю запись во многих, а не только в одном условии удаления связанных основных записей.

Хотя в вопросе говорится, что SQL Server пытается быть безопасным, предотвращая это, я действительно не понимаю, что может пойти не так, если у нас есть несколько каскадных путей, и какие проблемы мешают сделать его безопасным ?

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

Саид Нямати
источник

Ответы:

6

На этот вопрос «что может пойти не так» могут ответить только разработчики из Microsoft или Sybase. Если существует несколько каскадных путей к одной и той же записи, возможно, код попытается удалить ее несколько раз. Если он не предназначен для того, чтобы иметь дело с возможностью того, что удаляемая запись уже была удалена, это может привести к ошибке. Очевидно, эта проблема действительно существует (или считается, что она существует!), Поэтому вместо ее исправления реализация избегает ее, предотвращая определение повторяющихся каскадных путей. Это явно кратчайший путь, потому что другие СУБД не имеют проблем с этой ситуацией.

cliffordheath
источник
3
можно подумать, что после 20 лет работы с SQL Server они
смогут