"प्राथमिक कुंजी बाधा और अद्वितीय कुंजी बाधा में क्या अंतर है?"
यह शायद डेटाबेस डेवलपर्स के लिए सबसे अधिक बार पूछा जाने वाला जॉब इंटरव्यू प्रश्न है। इस लेख में, हम इसका उत्तर देने का प्रयास करेंगे।
आइए देखें कि प्राथमिक और अद्वितीय कुंजियां क्या हैं, साथ ही साथ उनकी समानताएं भी देखें।
प्राथमिक कुंजी
तालिका में प्रत्येक रिकॉर्ड को विशिष्ट रूप से पहचानने के लिए प्राथमिक कुंजी का उपयोग किया जाता है। प्रत्येक तालिका में कम से कम एक प्राथमिक कुंजी होनी चाहिए। SQL सर्वर में प्राथमिक कुंजी को परिभाषित करने के लिए, आपको बस कॉलम के नाम के बाद 'प्राथमिक कुंजी' कीवर्ड का उपयोग करना होगा।
अद्वितीय कुंजी
एक अद्वितीय कुंजी बाधा वाले कॉलम में केवल अद्वितीय मान हो सकते हैं - यह अद्वितीय कुंजी का परिणाम है जो कॉलम के अंदर डुप्लिकेट मानों को संग्रहीत करने से रोकता है।
एक अद्वितीय कुंजी को परिभाषित करने के लिए, आपको फ़ील्ड के नाम में 'अद्वितीय' जोड़ना होगा। कृपया ध्यान रखें कि किसी तालिका में अनन्य कुंजी होना अनिवार्य नहीं है।
प्राथमिक और अद्वितीय कुंजी बनाने का उदाहरण
निम्न स्क्रिप्ट एक 'टेस्ट' डेटाबेस बनाती है जिसमें 'कार' नामक एक तालिका होती है।
इस तालिका में 'आईडी' नामक प्राथमिक कुंजी कॉलम और 'नंबरप्लेट' नामक एक अद्वितीय कुंजी कॉलम होगा।
CREATE DATABASE TEST GO USE TEST GO CREATE TABLE Cars ( ID int PRIMARY KEY, Name varchar(255) NOT NULL, NumberPlate varchar(255) UNIQUE, Model int );
इसके बाद, आइए अपनी 'कार' तालिका में कुछ डमी रिकॉर्ड जोड़ें। निम्न स्क्रिप्ट निष्पादित करें:
INSERT INTO Cars VALUES (1, 'Toyota', 'ABC 123', 199), (2, 'Toyota', 'ABC 345', 207), (3, 'Toyota', 'ABC 758', 205), (4, 'Toyota', 'ABC 741', 306), (5, 'Toyota', 'ABC 356', 124)
इससे पहले कि हम अंतरों के बारे में बात करें, आइए पहले प्राथमिक और अद्वितीय कुंजियों के बीच समानता को देखें।
प्राथमिक और अद्वितीय कुंजियों के बीच समानता
- प्राथमिक या अद्वितीय कुंजी वाले कॉलम में डुप्लिकेट मान नहीं हो सकते हैं।
आइए 'कार' तालिका में 2 के आईडी मान (जो पहले से मौजूद है) के साथ एक नया रिकॉर्ड जोड़ने का प्रयास करें। निम्न स्क्रिप्ट निष्पादित करें:
INSERT INTO Cars VALUES (2, 'Toyota', 'ABC 345', 356)
जब आप उपरोक्त स्क्रिप्ट निष्पादित करते हैं, तो निम्न त्रुटि प्रदर्शित होगी:
त्रुटि स्पष्ट रूप से कहती है कि यह कथन प्राथमिक कुंजी बाधा का उल्लंघन करता है और डुप्लिकेट मानों को प्राथमिक कुंजी कॉलम में सम्मिलित नहीं किया जा सकता है।
इसी तरह, आइए निम्नलिखित क्वेरी का उपयोग करके एक अद्वितीय कुंजी बाधा के साथ 'नंबरप्लेट' कॉलम में एक डुप्लिकेट मान डालने का प्रयास करें:
INSERT INTO Cars VALUES (6, 'Toyota', 'ABC 345', 356)
इस बार, आप देखेंगे कि अद्वितीय कुंजी बाधा का उल्लंघन है क्योंकि 'एबीसी 345' मान 'नंबरप्लेट' कॉलम में पहले से मौजूद है जिसमें एक अद्वितीय कुंजी बाधा है। त्रुटि संदेश इस तरह दिखेगा:
- चूंकि प्राथमिक कुंजी और अद्वितीय कॉलम दोनों ही डुप्लीकेट मानों को स्वीकार नहीं करते हैं, उनका उपयोग तालिका में रिकॉर्ड की विशिष्ट पहचान के लिए किया जा सकता है। इसका मतलब है कि, प्राथमिक या अद्वितीय कुंजी कॉलम में प्रत्येक मान के लिए, केवल एक रिकॉर्ड लौटाया जाएगा।
प्राथमिक और अद्वितीय कुंजियों के बीच अंतर
अब जब हम प्राथमिक और अद्वितीय कुंजियों के बीच समानता को समझ गए हैं, तो आइए उनके अंतरों पर एक नज़र डालते हैं।
- तालिका में केवल एक प्राथमिक कुंजी हो सकती है, लेकिन कई अद्वितीय कुंजियां हो सकती हैं।
निम्नलिखित उदाहरण हमें इसे बेहतर ढंग से समझने में मदद करेगा।
हमने पहले बनाए गए 'टेस्ट' डेटाबेस के अंदर, दो प्राथमिक कुंजियों के साथ एक नई 'कार्स 2' तालिका बनाएं। ऐसा करने के लिए, निम्न स्क्रिप्ट निष्पादित करें:
CREATE TABLE Cars2 ( ID int PRIMARY KEY, Name varchar(255) NOT NULL, NumberPlate varchar(255) UNIQUE, Model int PRIMARY KEY );
ऊपर की स्क्रिप्ट में, हम प्राथमिक कुंजी बाधाओं को आईडी और मॉडल कॉलम पर सेट करते हैं। हालांकि, चूंकि तालिका में केवल एक कॉलम में प्राथमिक कुंजी बाधा हो सकती है, आपको निम्न त्रुटि दिखाई देगी:
यह त्रुटि संदेश हमें स्पष्ट रूप से सूचित करता है कि किसी तालिका में एकाधिक प्राथमिक कुंजी बाधाएँ नहीं हो सकती हैं।
अब, 'Cars2' तालिका में कई विशिष्ट कुंजी बाधाओं को जोड़ते हैं। निम्नलिखित स्क्रिप्ट पर एक नज़र डालें:
CREATE TABLE Cars2 ( ID int PRIMARY KEY, Name varchar(255) NOT NULL, NumberPlate varchar(255) UNIQUE, Model int UNIQUE );
यह हमें 'नंबरप्लेट' और 'मॉडल' कॉलम पर अद्वितीय कुंजी बाधाओं को जोड़ने की अनुमति देता है। चूंकि एक तालिका में अद्वितीय कुंजी बाधाओं के साथ कई कॉलम हो सकते हैं, उपरोक्त स्क्रिप्ट को निष्पादित करते समय आपको कोई त्रुटि संदेश नहीं दिखाई देगा।
- प्राथमिक कुंजी स्तंभ में शून्य मान नहीं हो सकते जबकि अनन्य कुंजी स्तंभ में एक शून्य मान हो सकता है।
आइए इसे क्रिया में देखें। सबसे पहले, 'कार' तालिका में प्राथमिक कुंजी कॉलम में एक शून्य मान के साथ एक रिकॉर्ड जोड़ें। नीचे दी गई स्क्रिप्ट को देखें:
INSERT INTO Cars VALUES ( null, 'Toyota', 'ABC 345', 356)
आप देख सकते हैं कि यह स्क्रिप्ट आईडी कॉलम में एक मान के रूप में शून्य सम्मिलित करती है। जब आप इसे निष्पादित करते हैं, तो आपको आउटपुट संदेश विंडो में निम्न त्रुटि दिखाई देनी चाहिए:
त्रुटि हमें बताती है कि एक शून्य मान सम्मिलित नहीं किया जा सकता क्योंकि प्राथमिक कुंजी कॉलम शून्य मानों की अनुमति नहीं देता है।
आइए अब 'नंबरप्लेट' अद्वितीय कुंजी कॉलम में शून्य मान जोड़ने का प्रयास करें। ऐसा करने के लिए, निम्न स्क्रिप्ट निष्पादित करें:
INSERT INTO Cars VALUES ( 6, 'Toyota',null, 356)
यह 'कार' तालिका में 6 के आईडी मान और शून्य मान के साथ एक नया रिकॉर्ड जोड़ता है - विशेष रूप से, शून्य मान 'नंबरप्लेट' कॉलम को सौंपा गया है। आप देखेंगे कि उपरोक्त स्क्रिप्ट को बिना त्रुटियों के निष्पादित किया जाएगा क्योंकि अद्वितीय कुंजी कॉलम डिफ़ॉल्ट रूप से शून्य मान स्वीकार कर सकता है।
यह सत्यापित करने के लिए कि क्या शून्य मान वास्तव में 'नंबरप्लेट' कॉलम में डाला गया है, हमें निम्नलिखित स्क्रिप्ट का उपयोग करके 'कार' तालिका से सभी रिकॉर्ड का चयन करना होगा:
SELECT * FROM Cars
उपरोक्त परिणाम में, हम स्पष्ट रूप से देख सकते हैं कि प्राथमिक कुंजी कॉलम 'आईडी' कोई शून्य मान नहीं है। दूसरी ओर, एक अद्वितीय कुंजी बाधा वाले 'नंबरप्लेट' कॉलम में एक शून्य मान होता है जिसे हमने अभी डाला है। याद रखें, आप एक अद्वितीय कुंजी कॉलम में एक से अधिक शून्य मान नहीं जोड़ सकते क्योंकि दूसरा शून्य मान पहले वाले का डुप्लिकेट होगा - और डुप्लिकेट की अनुमति नहीं है।
- डिफ़ॉल्ट रूप से, प्राथमिक कुंजी कॉलम पर एक अद्वितीय क्लस्टर इंडेक्स बनाया जाता है; दूसरी ओर, अद्वितीय कुंजी कॉलम पर एक अद्वितीय गैर-संकुल अनुक्रमणिका बनाई जाती है।
'कार' टेबल पर इंडेक्स देखने के लिए, निम्न स्क्रिप्ट निष्पादित करें:
USE TEST GO sp_help Cars
आउटपुट में, आप नीचे दिए गए चित्र में दिखाए गए अनुसार सूचकांकों सहित 'कार' तालिका का विवरण देखेंगे:
ऊपर दिए गए आंकड़े से, आप देख सकते हैं कि 'नंबरप्लेट' कॉलम में एक गैर-क्लस्टर अद्वितीय अनुक्रमणिका है जबकि आईडी कॉलम में अद्वितीय अनुक्रमणिका है।
निष्कर्ष
कुछ बुनियादी समानताओं के बावजूद, प्राथमिक और अद्वितीय कुंजियों में महत्वपूर्ण अंतर हैं। आपके पास प्रति तालिका केवल एक प्राथमिक कुंजी हो सकती है, लेकिन कई अद्वितीय कुंजियाँ हो सकती हैं। इसी तरह, प्राथमिक कुंजी कॉलम शून्य मान स्वीकार नहीं करता है, जबकि अद्वितीय कुंजी कॉलम में प्रत्येक में एक शून्य मान हो सकता है। और अंत में, प्राथमिक कुंजी कॉलम में एक अद्वितीय क्लस्टर इंडेक्स होता है जबकि एक अद्वितीय कुंजी कॉलम में एक अद्वितीय गैर-क्लस्टर इंडेक्स होता है।