Tôi đã đọc một số câu trả lời về Bill Karwin'ssingle table inheritance và nghĩ rằng phương pháp này sẽ tốt cho việc thiết lập Tôi đang xem xét:Làm cách nào để thực thi tính toàn vẹn tham chiếu trên Thừa kế Bảng đơn?
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
Tất cả các tùy chọn CASCADE
được thiết lập để DELETE
mà sẽ làm việc một cách chính xác khi một Playlist
là đã xóa, tuy nhiên, điều gì sẽ xảy ra nếu một số User
hoặc Team
bị xóa?
tức là. Nếu một số User
bị xóa, các hàng trong UserPlaylist
sẽ bị xóa nhưng các hàng được tham chiếu trong Playlist
và PlaylistVideo
sẽ vẫn còn. Tôi nghĩ về việc thực thi điều này dưới dạng TRIGGER AFTER DELETE
nhưng không có cách nào để biết liệu yêu cầu xóa có đến vì Playlist
đã bị xóa hay nếu User
bị xóa.
Cách tốt nhất để thực thi tính toàn vẹn trong tình huống này là gì?
Chỉnh sửa (Cung cấp ERD)
Tôi không hiểu cách UserPlaylist có thể là một thừa kế của Danh sách phát. Nó không phải là một bảng quan hệ thay thế? – Sebas
Tôi không hiểu câu hỏi của bạn. UserPlaylist có liên quan đến Playlist chỉ là id đến từ Playlist.id. Dưới đây là một số câu hỏi khác về Thừa kế bảng đơn - http://stackoverflow.com/a/3383320/47278 –
toàn bộ lý do bạn không muốn người dùng bị xóa xóa hàng danh sách phát và danh sách phát là vì họ cũng có thể tham chiếu bởi các bản ghi danh sách người chơi hoặc danh sách người chơi khác. – WebChemist