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

14
задан Glorfindel 19 April 2019 в 10:49
поделиться

2 ответа

Вам нужно решить, какое именно поведение вы хотите от системы. Ваше требование звучит немного ненормально и может указывать на ошибку в дизайне схемы БД. Почему вы хотите удалить элемент при удалении связанной папки? Что делать, если с этим элементом все еще связана другая папка, поскольку это отношение «многие ко многим»? В этом случае удаление элемента фактически вызовет нарушение внешнего ключа между элементом и FolderItem. Если элементы на самом деле принадлежат определенной папке, то есть отношения «один ко многим», вам вообще не понадобится таблица FolderItem.

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

13
ответ дан 1 December 2019 в 14:22
поделиться

Для вашего FK между элементом папки и элементом также должно быть включено каскадное удаление.

ОБНОВЛЕНИЕ:
Я прочитал ваш комментарий и альтернативный ответ. Совершенно верно - я не мог правильно прочитать ваш вопрос. Предполагая простые отношения «один-много», я был бы прав, но с «много-много» не все так просто. Триггеры (или, еще лучше, некоторая бизнес-логика в вашем коде) - лучший выбор для достижения желаемого.

2
ответ дан 1 December 2019 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: