2008-12-14 16 views
50

मुझे एक टेबल में एक कॉलम मिला है (उदाहरण के लिए उपयोगकर्ता नाम) जिसे मैं निश्चित करना चाहता हूं अद्वितीय है। तो मैं उस कॉलम के लिए एक अनूठी कुंजी बनाता हूं और इसे IX_Users_UserName कहते हैं।क्या एसक्यूएल सर्वर अनन्य कुंजी भी एक इंडेक्स है?

अब, यदि मैं उनके उपयोगकर्ता नाम के आधार पर उपयोगकर्ताओं के लिए बहुत सी खोज करता हूं तो मैं यह सुनिश्चित करना चाहता हूं कि उस फ़ील्ड के लिए एक अनुक्रमणिका है।

क्या मुझे एक अलग इंडेक्स बनाने की ज़रूरत है, या अनन्य कुंजी को इंडेक्स भी माना जाता है, जैसे कि प्राथमिक कुंजी क्लस्टरर्ड अनन्य कुंजी है?

+2

मुझे यह इंगित करने की आवश्यकता महसूस होती है कि एक प्राथमिक कुंजी स्वचालित रूप से एक क्लस्टर अद्वितीय कुंजी नहीं है। आपकी क्लस्टर इंडेक्स प्राथमिक कुंजी पर होने की आवश्यकता नहीं है। –

+0

यह भी देखें http://stackoverflow.com/questions/564895/what-is-the-difference-between-unique-key-and-index-with-isunique-yes –

उत्तर

37

अद्वितीय कुंजी: अद्वितीय कुंजी स्तंभ, जिस पर वे परिभाषित कर रहे हैं की विशिष्टता लागू करता है। अनन्य कुंजी कॉलम पर गैर-क्लस्टर इंडेक्स बनाता है। अद्वितीय कुंजी केवल एक नल मान की अनुमति देता है।

ऑल्टर तालिका स्तंभ पर अद्वितीय बाधा जोड़ने के लिए:

ALTER तालिका लेखक बाधा जोड़ें IX_Authors_Name अद्वितीय (नाम) MSDN से GO

Source

में अधिक जानकारी।

FWIW - यदि आपकी बाधा एक इंडेक्स नहीं बनाती है, तो मैं इसे IX_ नाम देने से बचूंगा क्योंकि इसे आम तौर पर एक (IX = अनुक्रमणिका) से संबद्ध माना जाएगा।

+0

चीयर्स :) सही उत्तर।मैं अपनी सभी अनूठी कुंजी को IX में भी दोबारा बदल दूंगा और उन क्षेत्रों में एक एकल इंडेक्स ड्रॉप करूंगा (क्यों डबल अप ... यह बुरा है!)। चीयर्स! –

+0

मैं गैर-अद्वितीय इंडेक्स से विशिष्ट रूप से अपने अद्वितीय इंडेक्स को उपसर्ग करना चाहता हूं: UI या UIX। यूके भी स्वीकार्य है लेकिन यह बताता है कि यह एक सूचकांक है। –

1

एक अद्वितीय कुंजी एक सूचकांक है जिसमें मुझे लगभग हर डेटाबेस उत्पाद पर संदेह है। यह होना चाहिए, अन्यथा डेटाबेस को इसे लागू करने में कठिन समय होगा: जब आप कोई मान डालते हैं, तो डेटाबेस को जवाब देना होता है, "क्या यह मान पहले से मौजूद है?" ऐसा करने का सौहार्दपूर्ण तरीका एक सूचकांक से परामर्श लेता है।

मेरे पास परीक्षण करने के लिए मेरे सामने एक SQL सर्वर नहीं है, लेकिन अगर ऐसा नहीं होता तो मैं चौंक गया।

20

असल में, SQL सर्वर में, एक अनूठी बाधा वास्तव में एक अद्वितीय अनुक्रमणिका के माध्यम से महसूस की जाती है।

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

तो क्या अंतर है? खैर - एक अनूठी बाधा वास्तव में एक टेबल पर एक तार्किक चीज है - आप इस इरादे को व्यक्त करना चाहते हैं कि दिए गए कॉलम (या कॉलम समूह) की सामग्री अद्वितीय है।

एक अद्वितीय सूचकांक (अधिकांश सूचकांक की तरह) एक "पीछे के दृश्य" कार्यान्वयन विस्तार से अधिक है।

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

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