मैं single table inheritance के बारे में Bill 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)
मुझे समझ में नहीं आता कि उपयोगकर्ता प्लेलिस्ट प्लेलिस्ट का विरासत कैसे हो सकता है। क्या यह इसके बजाय संबंध तालिका नहीं होनी चाहिए? – Sebas
मुझे आपका प्रश्न नहीं समझ रहा है। उपयोगकर्ता प्लेलिस्ट प्लेलिस्ट से संबंधित है कि आईडी प्लेलिस्ट.आईडी से आता है। सिंगल टेबल विरासत के बारे में कुछ और प्रश्न यहां दिए गए हैं - http://stackoverflow.com/a/3383320/47278 –
पूरे कारण से आप नहीं चाहते कि उपयोगकर्ता प्लेलिस्ट और प्लेलिस्ट वीडियो पंक्तियों को निकालने के लिए हटा दिया जाए क्योंकि वे भी संदर्भित हो सकते हैं अन्य उपयोगकर्ताप्लेलिस्ट या टीमप्लेलिस्ट रिकॉर्ड द्वारा। – WebChemist