我读过一些关于single table inheritanceBill Karwin's答案,并认为这种做法将有利于我正在考虑设置:如何在单表继承上实施参照完整性?
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
,会发生什么情况?
即。如果删除User
,UserPlaylist
中的行将被删除,但Playlist
和PlaylistVideo
中的引用行将保留。我考虑将此强制执行为TRIGGER AFTER DELETE
,但无法知道删除请求是否因为Playlist
已删除或User
已被删除而出现。
在这种情况下强制执行完整性的最佳方式是什么?
编辑(提供ERD)
我不明白UserPlaylist如何成为播放列表的继承。它不应该是一个关系表吗? – Sebas 2012-07-18 01:46:38
我不明白你的问题。 UserPlaylist与播放列表相关,只是该ID来自Playlist.id。以下是有关单表继承的更多问题 - http://stackoverflow.com/a/3383320/47278 – 2012-07-18 03:05:39
您不希望用户被删除以取出播放列表和播放列表视频行的所有原因是因为他们也可以参考由其他用户播放列表或团队播放列表记录。 – WebChemist 2012-07-18 04:57:35