मेरे पास 1 है .. * उपयोगकर्ता और पोस्ट के बीच संबंध। (एक उपयोगकर्ता कई पदों है)एसक्यूएल सर्वर 2008 - एकाधिक कैस्केडिंग एफके - क्या मुझे ट्रिगर की आवश्यकता है?
पोस्ट एक FK "उपयोगकर्ता id" कहा जाता है, जिस पर उपयोगकर्ता तालिका "उपयोगकर्ता id" क्षेत्र के लिए नक्शे है।
मैं स्थापित करने के लिए इस FK कास्केड के रूप में अद्यतन/हटाने की कोशिश की, लेकिन मैं इस त्रुटि मिलती है:
'Users' table saved successfully 'Posts' table - Unable to create relationship 'FK_Posts_Users'.
Introducing FOREIGN KEY constraint 'FK_Posts_Users' on table 'Posts' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.
मैं एक मेज PostHelpful कहा जाता है। एक पोस्ट में कई सहायक हैं।
सहायक के पास उपयोगकर्ता के लिए एक कैस्केडिंग एफके है (इसलिए जब उपयोगकर्ता हटा दिया जाता है, तो उनकी सहायक भी हटा दी जाती हैं)।
लेकिन मुझे लगता है कि यह "एकाधिक कैस्केड पथ" के लिए शिकायत का कारण है।
क्योंकि अगर मैं उपयोगकर्ता को हटाता हूं (वर्तमान में), तो यह उनके सहायक को हटा देगा। लेकिन मैं पोस्ट करने के लिए एक कोडेड जोड़ने की कोशिश कर रहा हूं, क्या यह पोस्ट को हटा देगा, फिर उस पोस्ट के लिए सहायक की कोशिश करें और हटाएं (सहायक के रूप में भी पोस्ट करने के लिए एक कैस्केडिंग एफके है)। उस परिदृश्य में, जो एसके एसक्यूएल को चुनौती देगा?
यहाँ प्रश्न में तीन टेबल के डेटाबेस आरेख है:
आप देख सकते हैं, "PostHelpful" एक बच्चे को दोनों "पोस्ट" और "उपयोगकर्ता" है (FK के लिए है दोनों)।
तो मैं दोनों चाबियाँ कैस्केडिंग नहीं कर सकता? सहायक उपकरण (और उपयोगकर्ता को संदर्भित करने वाली अन्य तालिकाओं) को मैन्युअल रूप से हटाने के लिए मुझे "उपयोगकर्ता" (हटाए जाने के बाद) पर ट्रिगर की आवश्यकता है।
आपको समस्या मिली है और इसे कैसे ठीक किया जाए। उपयोगकर्ता और PostHelpful के बीच कैस्केड डिलीट को हटाएं, उपयोगकर्ता को ट्रिगर जोड़ें जो 'हटाएं' पर पोस्टहेल्पफुल में हटाएं। फिर आप उपयोगकर्ता और पोस्ट के बीच कैस्केड डिलीट जोड़ने में सक्षम होना चाहिए। –
@ माइकल एरिक्सन - वास्तव में? मेरा मतलब है कि यह काम करेगा, लेकिन मुझे उम्मीद थी कि यह चीजों को करने का गलत तरीका था। ट्रिगर्स को रेफरेंसियल अखंडता को लागू नहीं करना चाहिए। – RPM1984
एचएम। कभी-कभी कैस्केड को संदर्भित अखंडता बाधा के हिस्से के रूप में हटाया नहीं जाता है। हटाने को संभालने के लिए एक सुविधाजनक तरीका की तरह। मैं शायद ट्रिगर या कैस्केड डिलीट का उपयोग नहीं करता। मैं एक संग्रहित प्रक्रिया लिखूंगा जो सही क्रम में हटा दें। –