2009-02-19 8 views
49

मेरे पास प्राथमिक कुंजी वाला एक टेबल है, लेकिन मैं दो अन्य स्तंभों को बाधित करना चाहता हूं ताकि दोनों के संयोजन हमेशा अद्वितीय होने की गारंटी दी जा सके।IsUnique = Yes के साथ अद्वितीय कुंजी और अनुक्रमणिका के बीच क्या अंतर है?

(एक गूंगा उदाहरण:। एक किताबें तालिका में, IBAN स्तंभ प्राथमिक कुंजी है, लेकिन शीर्षक और लेखक स्तंभों के संयोजन भी हमेशा अद्वितीय होना चाहिए)

एसक्यूएल सर्वर प्रबंधन स्टूडियो में यह संभव है या तो एक नया इंडेक्स बनाने के लिए और IsUnique को हाँ पर सेट करें, या मैं एक नई अनन्य कुंजी बना सकता हूं।

दोनों दृष्टिकोणों के बीच क्या अंतर है, और कौन सा उद्देश्य किस उद्देश्य के लिए उपयुक्त है?

+5

बस प्रासंगिक मामले में: यदि आपको एकाधिक पंक्तियों को पूर्ण होने की अनुमति देने की आवश्यकता है लेकिन किसी भी गैर-नल पंक्तियों को अद्वितीय होना चाहिए: या तो एक ट्रिगर के साथ लागू करें, या एक अद्वितीय इंडेक्स के साथ एक दृश्य - चयन शीर्षक के रूप में xxx बनाएं, पुस्तकें से लेखक जहां (शीर्षक + लेखक) पूर्ण नहीं है तो उस दृश्य पर सूचकांक बनाएं – Kristen

+0

धन्यवाद कर्स्टन, यह उपयोगी जानकारी थी! – JacobE

+1

यह भी देखें कि http://stackoverflow.com/questions/366186/is-the-sql-server-unique-key-also-an-index –

उत्तर

35

एक विशिष्ट बाधा बनाना नियम का एक स्पष्ट बयान है। सूचकांक की IsUnique विशेषता एक कार्यान्वयन विस्तार है - कैसे नियम लागू किया गया है, नियम नियम है। प्रभाव हालांकि वही है।

+0

प्रदर्शन के बारे में क्या है? – pylover

+1

@pylover: कुछ मामलों में एक बाधा (उदा। एक विदेशी कुंजी या शून्य नहीं) ऑप्टिमाइज़र उपयोगी जानकारी देकर प्रदर्शन में सुधार कर सकती है जो अन्यथा नहीं होगी। विशिष्टता के मामले में मुझे लगता है कि एक बाधा और केवल एक सूचकांक के बीच कोई अंतर नहीं है, लेकिन 100% निश्चित नहीं है। –

0

अद्वितीय अनुक्रमणिका अद्वितीय कुंजी हैं।

6

बस, कि आप जानते हैं, इसलिए जब आप एक अद्वितीय बाधा एसक्यूएल सर्वर बनाने के दृश्यों

7

के पीछे एक सूचकांक पैदा करेगा वहाँ 2. एक अद्वितीय बाधा के बीच एक स्पष्ट अंतर नहीं है परिभाषित करता है क्या स्तंभों के संयोजन हो गया है अद्वितीय। एक अद्वितीय अनुक्रमणिका यह सुनिश्चित करने का एक तरीका है कि उपरोक्त हमेशा वैध है। लेकिन एक अद्वितीय बाधा का समर्थन करने वाला एक गैर-अद्वितीय सूचकांक होना संभव है। (यदि बाधा कमजोर है = केवल प्रतिबद्ध समय पर वैध होना चाहिए, लेकिन लेनदेन के बीच में तोड़ने की अनुमति है)

4

एक चीज जिसे मैंने अभी कठिन तरीके से पाया है वह है कि एसएसएमएस में अद्वितीय कुंजी की स्क्रिप्टिंग डिफ़ॉल्ट रूप से सत्य पर सेट किया गया था लेकिन सूचकांक की पटकथा गलत पर सेट की गई थी। जब मैंने एसएसएमएस से संदर्भ मेनू के रूप में स्क्रिप्ट टेबल का उपयोग किया तो मुझे अपने अद्वितीय सूचकांक नहीं मिला।

यदि यह प्रकार अनन्य कुंजी पर सेट है, तो आप "अनदेखा डुप्लिकेट कुंजी" सेटिंग को बदल नहीं सकते हैं। सबसे पहले आपने अनन्य कुंजी से इंडेक्स में टाइप बदल दिया है, फिर आप डुप्लिकेट कुंजी को अनदेखा कर सकते हैं।

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