विदेशी कुंजी दो तालिकाओं के बीच एक अभिभावक - बाल संबंध को परिभाषित करती है। मूल तालिका में प्राथमिक कुंजी बाल तालिका पंक्तियों तक की विदेशी कुंजी है।
अब यदि मूल तालिका में वह प्राथमिक कुंजी अद्यतन हो जाती है, तो अद्यतन नियम लागू होता है। या तो सभी बाल पंक्तियों को भी अद्यतन किया जाता है, जो पूर्ण या कुछ भी सेट हो जाता है। सर्वोत्तम अभ्यास हालांकि प्राथमिक कुंजी होना है जो कभी भी नहीं बदले (एक निश्चित आईडी या कुछ), तो यह कम महत्वपूर्ण नियम है।
अधिक महत्वपूर्ण एक DELETE नियम है - क्या होगा अगर मूल पंक्ति हटा दी जाती है (उदा। आदेश हटा दिया गया है)? आप या तो सभी बच्चे पंक्तियों (सभी ऑर्डर लाइन आइटम) को कैस्केड डिलीट के साथ हटा सकते हैं, या आप अपनी विदेशी कुंजी को न्यूल पर सेट कर सकते हैं (उनके पास अब माता-पिता नहीं हैं) - यह पूरी तरह से आपके ठोस परिदृश्य पर निर्भर है।
ऑर्डर/ऑर्डर लाइन परिदृश्य में, पूर्ण ऑर्डर हटा दिए जाने पर ऑर्डर लाइनों को हटाने के लिए पूरी तरह से उपयोगी हो सकता है, लेकिन शायद आप एक उत्पाद को हटाना नहीं चाहते हैं, सिर्फ इसलिए कि एक ऑर्डर जो संदर्भित करता है हटा दिया गया - कोई भी एकल जवाब नहीं है - यह आपके परिदृश्य और आपके ऐप पर निर्भर करता है।
मार्क
स्रोत
2009-07-16 12:57:26
धन्यवाद मार्क, मैं इस एमएसडीएन पेज से सीख रहा हूं, http://msdn.microsoft.com/en-us/library/ms186973%28SQL.90%29.aspx एक भ्रम, यह उल्लेख किया गया है "यदि रेफरेंसियल कार्यों को कैस्केड करना भी है लक्ष्य तालिकाओं पर परिभाषित किया गया है ... ", मेरा भ्रम चार कार्यों (कोई कार्रवाई | कैस्केड | सेट नल | सेट डिफॉल्ट) से परे लगता है, हम कुछ अन्य कार्यों को भी परिभाषित कर सकते हैं? – George2
नहीं, आप अपडेट और डिलीट परिदृश्य के लिए उन चार कार्यों में से एक को परिभाषित कर सकते हैं। लेख के बारे में क्या बात है, वह परिदृश्य है जहां टेबलबी टेबलला का संदर्भ देता है और "डिलीट कैस्केड" पर है, इसलिए यदि टैबलेट की एक पंक्ति हटा दी जाती है, तो टेबलबी के सभी बच्चे भी हटा दिए जाएंगे। यदि इस मामले में, ऑन डिलीट कैस्केड एक्शन के साथ एक टेबलसी संदर्भ तालिका टैब है, तो टेबलए में यह विलोपन टेबलबी पर जाता है और फिर टेबलसी पर जाता है। –
धन्यवाद मार्क, मुझे आपका जवाब पसंद है! – George2