2009-07-16 15 views
15

में रिलेशनशिप के लिए अद्यतनों को हटाने और हटाने के नियमों को समझना मैं विदेशी कुंजी बाधाओं को परिभाषित करते समय SQL सर्वर 2008 प्रबंधन स्टूडियो में अद्यतन और हटाने का क्या मतलब है, इस बारे में उलझन में हूं। मुझे संबंधित सहायता दस्तावेज़ भी नहीं मिला (उदा। एफ 1 सहायता)।एसएसएमएस 2008

यहां स्क्रीन स्नैपशॉट है। सराहना करें यदि कोई वर्णन कर सकता है कि उनका क्या अर्थ है और कुछ संबंधित दस्तावेज़ों को पढ़ने के लिए अनुशंसा करते हैं। :-)

enter image description here

उत्तर

22

विदेशी कुंजी दो तालिकाओं के बीच एक अभिभावक - बाल संबंध को परिभाषित करती है। मूल तालिका में प्राथमिक कुंजी बाल तालिका पंक्तियों तक की विदेशी कुंजी है।

अब यदि मूल तालिका में वह प्राथमिक कुंजी अद्यतन हो जाती है, तो अद्यतन नियम लागू होता है। या तो सभी बाल पंक्तियों को भी अद्यतन किया जाता है, जो पूर्ण या कुछ भी सेट हो जाता है। सर्वोत्तम अभ्यास हालांकि प्राथमिक कुंजी होना है जो कभी भी नहीं बदले (एक निश्चित आईडी या कुछ), तो यह कम महत्वपूर्ण नियम है।

अधिक महत्वपूर्ण एक DELETE नियम है - क्या होगा अगर मूल पंक्ति हटा दी जाती है (उदा। आदेश हटा दिया गया है)? आप या तो सभी बच्चे पंक्तियों (सभी ऑर्डर लाइन आइटम) को कैस्केड डिलीट के साथ हटा सकते हैं, या आप अपनी विदेशी कुंजी को न्यूल पर सेट कर सकते हैं (उनके पास अब माता-पिता नहीं हैं) - यह पूरी तरह से आपके ठोस परिदृश्य पर निर्भर है।

ऑर्डर/ऑर्डर लाइन परिदृश्य में, पूर्ण ऑर्डर हटा दिए जाने पर ऑर्डर लाइनों को हटाने के लिए पूरी तरह से उपयोगी हो सकता है, लेकिन शायद आप एक उत्पाद को हटाना नहीं चाहते हैं, सिर्फ इसलिए कि एक ऑर्डर जो संदर्भित करता है हटा दिया गया - कोई भी एकल जवाब नहीं है - यह आपके परिदृश्य और आपके ऐप पर निर्भर करता है।

मार्क

+1

धन्यवाद मार्क, मैं इस एमएसडीएन पेज से सीख रहा हूं, http://msdn.microsoft.com/en-us/library/ms186973%28SQL.90%29.aspx एक भ्रम, यह उल्लेख किया गया है "यदि रेफरेंसियल कार्यों को कैस्केड करना भी है लक्ष्य तालिकाओं पर परिभाषित किया गया है ... ", मेरा भ्रम चार कार्यों (कोई कार्रवाई | कैस्केड | सेट नल | सेट डिफॉल्ट) से परे लगता है, हम कुछ अन्य कार्यों को भी परिभाषित कर सकते हैं? – George2

+1

नहीं, आप अपडेट और डिलीट परिदृश्य के लिए उन चार कार्यों में से एक को परिभाषित कर सकते हैं। लेख के बारे में क्या बात है, वह परिदृश्य है जहां टेबलबी टेबलला का संदर्भ देता है और "डिलीट कैस्केड" पर है, इसलिए यदि टैबलेट की एक पंक्ति हटा दी जाती है, तो टेबलबी के सभी बच्चे भी हटा दिए जाएंगे। यदि इस मामले में, ऑन डिलीट कैस्केड एक्शन के साथ एक टेबलसी संदर्भ तालिका टैब है, तो टेबलए में यह विलोपन टेबलबी पर जाता है और फिर टेबलसी पर जाता है। –

+0

धन्यवाद मार्क, मुझे आपका जवाब पसंद है! – George2

1

एक विदेशी कुंजी क्षेत्र केवल शून्य या एक मूल्य के प्राथमिक कुंजी क्षेत्र द्वारा परिभाषित स्टोर कर सकते हैं।

यदि आप प्राथमिक कुंजी द्वारा परिभाषित नहीं किए गए किसी चीज़ पर विदेशी कुंजी मान को बदलने का प्रयास करते हैं तो आपको एक त्रुटि मिलेगी। इसी तरह यदि आप एक प्राथमिक कुंजी जो विदेशी कुंजी निर्भरता है बदलने की कोशिश आप एक उदाहरण के रूप में कोई त्रुटि ... मिल जाएगा

Models table 
modelID (primary key) model 
1      Jeep 
2      Ford 

Customer table 
id customer modelID (foreign key of Models.modelID) 
1  1234  1 
2  2345  2 

आप मॉडल से जीप अभिलेख को नष्ट करने का प्रयास करें तो आप एक त्रुटि मिल जाएगा क्योंकि ग्राहक 1234 एक मॉडल आईडी 1 सेट है, और यह अगर विदेशी कुंजी है। इसी तरह अगर मैं ग्राहक 1234 अद्यतन करने के लिए 3 के एक modelID की कोशिश यह एक त्रुटि फेंक होगा मॉडल तालिका में कोई प्राथमिक कुंजी 3

Check this out

+0

धन्यवाद क्रिस, लेकिन आपके द्वारा अनुशंसित लिंक का उल्लेख नहीं है कि एसएमएसएस में नियम अपडेट और हटाना क्या है? यह सामान्य फोर्गिन कुंजी सिद्धांत के बारे में बात करता है। – George2

+1

उन नियमों पर एक Google पुस्तक संदर्भ है http://books.google.com/books?id=OgkmmR7-XxUC&pg=PP320&lpg=PP320&dq=sql+update+rule+and+delete+rule&source=bl&ots=OUmtEg2kNH&sig=6NxvAbBkCA9dpFnmrheIcEKVGOM&hl=hi&ei = DyRfSpjIIcqwtgfvo5XgAw और sa = एक्स और ओआई = book_result और सीटी = परिणाम और resnum = 4 –

+0

क्या हम Google पुस्तक सामग्री प्रिंट कर सकते हैं? मैंने कड़ी मेहनत की लेकिन प्रिंट नहीं कर सका। :-) – George2

1

MSDN page एक अच्छी शुरुआत की तरह दिखता है की एक मूल्य के होने न होने के कारण ।

+0

धन्यवाद आकाशम, मैंने पाया कि यह पृष्ठ बहुत उपयोगी है। एक भ्रम है, इसका उल्लेख है "अगर लक्ष्य तालिकाओं पर रेफरेंसियल क्रियाओं को भी परिभाषित किया गया है ...", मेरा भ्रम चार कार्यों (कोई कार्रवाई | कैस्केड | सेट नल | सेट डिफॉल्ट) से परे प्रतीत होता है, हम कुछ अन्य कार्यों को भी परिभाषित कर सकते हैं? – George2

+2

मुझे विश्वास नहीं है - और मुझे लगता है कि उन कार्यों में से एक कोई और जटिल व्यवहार, आम तौर पर हम वास्तव में करना चाहते थे। – AakashM

3

ऐसा लगता है कि प्रलेखन तरह Foreign Key Relationships Dialog Box पर है।

बीटीडब्लू, एफ 1 सहायता ने एसएसएमएस 2008 में मेरे लिए ठीक काम किया। यह मुझे उपर्युक्त पृष्ठ पर ले गया (बाद में मैंने 1/2 घंटे ऑनलाइन खोजा)।

+0

धन्यवाद जॉन, दुर्भाग्यवश, F1 सहायता मेरे लिए मदद नहीं करती । :-( – George2

+0

मैंने एक टेबल पर राइट-क्लिक किया और "डिज़ाइन" चुना। मैंने फिर डिज़ाइनर पर राइट-क्लिक किया और "रिलेशनशिप" चुना। मैंने फिर एफ 1 दबाया और मदद मिली। SQL सर्वर का कौन सा संस्करण आप उपयोग कर रहे हैं? –

संबंधित मुद्दे