Я читал некоторые из ответов Билла Карвина о одиночном наследовании таблицы и думаю, что этот подход будет хорошо для настройки, которую я рассматриваю:
Playlist
--------
id AUTO_INCREMENT
title
TeamPlaylist
------------
id REFERENCES Playlist.id
teamId REFERENCES Team.id
UserPlaylist
------------
id REFERENCES Playlist.id
userId REFERENCES User.id
PlaylistVideo
-------------
id
playlistId REFERENCES Playlist.id
videoId REFERENCES Video.id
Все параметры CASCADE установлены на DELETE, которые будут корректно работать, когда удаляется Playlist, однако, что происходит, если удаляется User или Team?
т. Если a User удаляется, строки в UserPlaylist будут удалены, но ссылки в строках в Playlist и PlaylistVideo останутся. Я думал об обеспечении этого как TRIGGER AFTER DELETE, но не существует способа узнать, вызвал ли запрос удаления, потому что был удален Playlist или удалено User.
Каков наилучший способ обеспечения целостности в этой ситуации?
Изменить (предоставлено ERD)
