SQL ondelete каскад с таблицей соединений - PullRequest
0 голосов
/ 13 июня 2018

У меня есть три таблицы в базе данных Notes, Tags, NoteTagJoin Я использую many to many отношение базы данных с внешними ключами, которые хранятся в таблице NoteTagJoin Теперь я знаю, что вы можете установить для внешних ключейonCascade delete и, насколько я знаю, если бы я удалил Note все Tags и NoteTagJoin ссылки были бы удалены, связанные с этим Note, но есть ли способ сделать так, чтобы только из Notes записейбудут удалены и ссылки из NoteTagJoin, но не из Tags, потому что другие заметки могут иметь такие же теги при использовании onCascade delete?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Самое простое решение, которое мне приходит в голову, это просто использовать ON DELETE CASCADE с таблицей мостов NoteTagJoin.Затем удаление заметок из таблицы Notes приведет к удалению ассоциаций с тегами заметок, но ничего из таблицы Tags не удалит.

Это оставляет проблему возможных висячих тегов, которые не связаны с какими-либозаметки.Но, возможно, вы могли бы запустить периодическую очистку, чтобы удалить их, или, возможно, кто-то будет управлять ими вручную (например, приложением).

0 голосов
/ 13 июня 2018

Да, вы можете

ALTER TABLE `notes_tags` 
  ADD FOREIGN KEY (`note_id`) REFERENCES `notes` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
  ADD FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON UPDATE CASCADE ON DELETE CASCADE ;

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...