Ich habe einige Bill Karwin's Antworten zu single table inheritance lesen und denken diese Vorgehensweise für das Setup gut wäre ich überlege:Wie erzwinge die referenzielle Integrität bei der Vererbung einzelner Tabellen?
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
Alle CASCADE
Optionen DELETE
gesetzt werden, die für korrekt funktionieren, wenn ein Playlist
ist gelöscht, was passiert jedoch, wenn eine User
oder Team
gelöscht wird?
dh. Wenn eine User
gelöscht wird, werden die Zeilen in UserPlaylist
gelöscht, aber die referenzierten Zeilen in Playlist
und PlaylistVideo
bleiben erhalten. Ich dachte darüber nach, dies als TRIGGER AFTER DELETE
durchzusetzen, aber es gibt keine Möglichkeit zu wissen, ob die Löschanforderung zustande kam, weil die Playlist
gelöscht wurde oder wenn die User
gelöscht wurde.
Was ist der beste Weg, um Integrität in dieser Situation zu erzwingen?
bearbeiten (Gestellt ERD)
Ich verstehe nicht, wie UserPlaylist eine Vererbung von Playlist sein könnte. Sollte es nicht stattdessen eine Relationstabelle sein? – Sebas
Ich verstehe deine Frage nicht. UserPlaylist bezieht sich nur auf Playlist, die ID kommt von Playlist.id. Hier sind einige weitere Fragen zu Single Table Inheritance - http://Stackoverflow.com/a/3383320/47278 –
Der ganze Grund, warum Sie nicht möchten, dass ein Benutzer gelöscht wird, um Playlist- und Playlist-Videozeilen herauszunehmen, liegt daran, dass sie auch referenziert werden konnten durch andere userplaylist- oder teamplaylist-Aufzeichnungen. – WebChemist