Я прочитал некоторые из Bill Karwin's ответов о single table inheritance и думаю, что этот подход будет хорошо для установки я рассматриваю:Как обеспечить ссылочную целостность в одиночном наследовании таблицы?
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
?
ie. Если удаляется User
, строки в UserPlaylist
будут удалены, но ссылочные строки в Playlist
и PlaylistVideo
останутся. Я думал об обеспечении этого как TRIGGER AFTER DELETE
, но нет способа узнать, возник ли запрос на удаление, потому что был удален Playlist
или если был удален User
.
Каков наилучший способ обеспечения целостности в этой ситуации?
Edit (Прилагается ERD)
Я не понимаю, как UserPlaylist может быть наследованием списка воспроизведения. Разве это не таблица отношений? – Sebas
Я не понимаю ваш вопрос. UserPlaylist относится к списку воспроизведения только для того, что идентификатор поступает из Playlist.id. Вот еще несколько вопросов о наследовании одиночного стола - http://stackoverflow.com/a/3383320/47278 –
- вся причина, по которой вы не хотите, чтобы пользователь был удален, чтобы вывести списки воспроизведения и списки воспроизведения в виде списка, потому что они также могли ссылаться другими учетными записями userplaylist или teamplaylist. – WebChemist