Czytałem niektóre Bill Karwin's odpowiedzi na temat single table inheritance i że to byłoby dobre podejście do konfiguracji Zastanawiam:Jak wymusić integralność referencyjną w dziedziczeniu z pojedynczego stołu?
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
Wszystkie opcje CASCADE
są ustawione na DELETE
która będzie działać poprawnie, gdy jest Playlist
usunięto jednak, co się stanie, jeśli usunięto User
lub?
tj. Jeśli zostanie usunięta User
, wiersze w UserPlaylist
zostaną usunięte, ale pozostaną wiersze z odniesieniami w Playlist
i PlaylistVideo
. Zastanowiłem się nad wymuszeniem tego jako TRIGGER AFTER DELETE
, ale nie można się dowiedzieć, czy wystąpiło żądanie usunięcia, ponieważ usunięto Playlist
lub usunięto User
.
Jaki jest najlepszy sposób na egzekwowanie uczciwości w tej sytuacji?
Edit (Pod warunkiem, ERD)
Nie rozumiem, w jaki sposób UserPlaylist może być dziedziczeniem listy odtwarzania. Czy nie powinien to być tabela relacji? – Sebas
Nie rozumiem twojego pytania. UserPlaylist jest powiązana z Playlistą tylko dlatego, że id pochodzi z Playlist.id. Oto kilka pytań na temat dziedziczenia pojedynczego stołu - http://stackoverflow.com/a/3383320/47278 –
Powód, dla którego nie chcesz, aby usunięty użytkownik usuwał listy odtwarzania i wiersze wideo z listy odtwarzania, ponieważ mogliby się również odwoływać przez inne listy użytkowników lub teamplaylist. – WebChemist