डिलीट / अपडेट फॉरेन कीज बाधाओं में SET NULL का उद्देश्य क्या है?


15

मैं शायद संकीर्ण सोच वाला हूं, लेकिन अगर मैं एक विदेशी कुंजी बाधा बनाता हूं और एक पंक्ति अपडेट या डिलीट हो जाती है, तो मैं उस कनेक्शन को खो देता हूं यदि चाइल्ड टेबल का कॉलम NULL पर सेट हो जाता है।

जानबूझकर इन अनाथ पंक्तियों को रखने का उद्देश्य क्या है?


मैं उपयोग के मामलों की तलाश में हूं, और मुझे नहीं लगता कि वे डेटाबेस-विशिष्ट हैं (यहां गलत हो सकते हैं)
डेरेक डाउनी

मैंने इसके लिए कभी भी उपयोग-मामला नहीं देखा है ...
a_horse_with_no_name

जवाबों:


13

चाहे set nullउपयोगी है या नहीं है कि तुम क्या चुना है पर निर्भर करता है nullविशेष संदर्भ में मतलब है - सब भ्रम और राय के साथ चारों ओर nullIMO समझदार दृष्टिकोण को डीबीए के लिए है

  1. चुनें (और दस्तावेज़) प्रत्येक अशक्त क्षेत्र के लिए इसका क्या अर्थ है
  2. सुनिश्चित करें कि इसका मतलब केवल एक चीज है

उन नियमों के साथ, निम्नलिखित उपयोग के मामले पर विचार करें:

  • आपके पास एक तालिका 'दुकान' है (उदाहरण के लिए व्यक्तिगत परिसर)
  • आपके पास एक टेबल 'रिटेलर' है (जैसे चेन)
  • 'दुकान' तालिका में 'रिटेलर' की कुंजी का जिक्र है।
  • आपने nullएक स्वतंत्र दुकान का प्रतिनिधित्व करने के लिए परिभाषित किया है (यानी वह जो श्रृंखला का हिस्सा नहीं है)
  • एक 'रिटेलर' इस बात के लिए शाखाओं को बंद कर देता है कि आप उसकी दुकानों को स्वतंत्र मानते हैं

इस मामले में, एक on delete set nullसमझ में आता है। इन व्यावसायिक नियमों को मॉडलिंग करने के अन्य तरीके हैं लेकिन यह सबसे सरल है और अगर यह उन तथ्यों को सही ढंग से फिट करता है जिनकी आप वास्तविक दुनिया में परवाह करते हैं, तो मेरा सुझाव है कि यह पूरी तरह से ठीक है


अशक्त के सख्त अर्थ के साथ अच्छे अंक, और आपके उदाहरण से यह स्पष्ट है कि यह एक विशेषता क्यों है।
डेरेक डाउनी

1

अधिकांश उपयोग के मामले जिन्हें मैं आमतौर पर सोच सकता हूं, वे हैं "ठीक है, हम कुछ अलग कर सकते हैं लेकिन हमें ऐसा महसूस हुआ कि हम ऐसा कर रहे हैं"।

ownerकिसी कंपनी के किसी समस्या ट्रैकिंग सिस्टम में बग के लिए फ़ील्ड पर विचार करें । यदि जॉन ने इस्तीफा दे दिया, तो निश्चित रूप से उसकी सभी समस्याओं को हटा नहीं दिया जाना चाहिए जब उसका खाता हटा दिया जाता है। फिर भी, कुछ डेटाबेस SET DEFAULTएक कार्रवाई के रूप में अनुमति देते हैं (या ट्रिगर एक ही कार्य करते हैं), और एक Nobodyकर्मचारी होने पर मुद्दों का डिफ़ॉल्ट मालिक एक विकल्प हो सकता है। या हम disabledउनके रिकॉर्ड को हटाने के बजाय जॉन के लिए एक क्षेत्र बना सकते हैं ।


3
इस मामले में मैं तर्क को हटाने की अनुमति नहीं देने का तर्क दूंगा ( RESTRICT), अगर कोई अन्य कारण नहीं है कि किसी पुराने कर्मचारी को दोष देना जब कुछ गलत हो जाता है!
डेरेक डाउनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.