प्राथमिक कुंजी

डेटाबेस के संबंधपरक मॉडल में, एक प्राथमिक कुंजी विशेषताओं (कॉलम (डेटाबेस)) के एक न्यूनतम सेट की एक विशिष्ट पसंद होती है, जो विशिष्ट रूप से एक संबंध (डेटाबेस) में एक टपल (पंक्ति (डेटाबेस)) निर्दिष्ट करती है। ) (तालिका (डेटाबेस))। अनौपचारिक रूप से, एक प्राथमिक कुंजी वह होती है जो विशेषता रिकॉर्ड की पहचान करती है, और साधारण मामलों में एक एकल विशेषता का गठन करती है: एक अद्वितीय आईडी। अधिक औपचारिक रूप से, एक प्राथमिक कुंजी उम्मीदवार कुंजी (एक न्यूनतम key) का विकल्प है; कोई अन्य उम्मीदवार कुंजी एक वैकल्पिक कुंजी है।

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

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

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

संबंधपरक मॉडल, जैसा कि संबंधपरक कलन और संबंधपरक बीजगणित के माध्यम से व्यक्त किया गया है, प्राथमिक कुंजियों और अन्य प्रकार की कुंजियों के बीच अंतर नहीं करता है। मुख्य रूप से एप्लिकेशन प्रोग्रामर की सुविधा के रूप में प्राथमिक कुंजियों को SQL मानक में जोड़ा गया था। प्राथमिक कुंजियाँ एक पूर्णांक होती हैं जो वृद्धिशील होती हैं, एक सार्वभौमिक रूप से विशिष्ट पहचानकर्ता (UUID) या Hi/Lo एल्गोरिथम का उपयोग करके उत्पन्न की जा सकती हैं।

SQL
में प्राथमिक कुंजियों को परिभाषित करना प्राथमिक कुंजी को प्राथमिक कुंजी बाधा के माध्यम से SQL # मानकीकरण इतिहास में परिभाषित किया गया है। मौजूदा तालिका में इस तरह की बाधा जोड़ने के लिए सिंटैक्स को SQL:2003 में इस तरह परिभाषित किया गया है:

<वाक्यविन्यास लैंग = एसक्यूएल> वैकल्पिक तालिका <तालिका पहचानकर्ता> जोड़ें [प्रतिबंध <बाधा पहचानकर्ता>] प्राथमिक कुंजी (<कॉलम नाम> [{, <कॉलम नाम>}...]) 

तालिका निर्माण के दौरान प्राथमिक कुंजी को सीधे भी निर्दिष्ट किया जा सकता है। SQL मानक में, प्राथमिक कुंजी में एक या एकाधिक कॉलम हो सकते हैं। प्राथमिक कुंजी में भाग लेने वाले प्रत्येक स्तंभ को पूर्ण रूप से NOT NULL के रूप में परिभाषित किया गया है। ध्यान दें कि कुछ आरडीबीएमएस को प्राथमिक कुंजी कॉलम को स्पष्ट रूप से चिह्नित करने की आवश्यकता होती है. <वाक्यविन्यास लैंग = एसक्यूएल> तालिका बनाएँ तालिका_नाम (  ... ) 

यदि प्राथमिक कुंजी में केवल एक कॉलम होता है, तो कॉलम को निम्नलिखित सिंटैक्स का उपयोग करके चिह्नित किया जा सकता है:

<वाक्यविन्यास लैंग = एसक्यूएल> तालिका बनाएँ तालिका_नाम (  id_col INT प्राथमिक कुंजी,   col2 वर्ण भिन्न (20),   ... ) 

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

चूंकि प्राथमिक कुंजी मुख्य रूप से प्रोग्रामर की सुविधा के रूप में मौजूद होती है, सरोगेट प्राथमिक कुंजी अक्सर डेटाबेस एप्लिकेशन डिज़ाइन में विशेष रूप से कई मामलों में उपयोग की जाती है।

सरोगेट प्राथमिक कुंजी की लोकप्रियता के कारण, कई डेवलपर्स और कुछ मामलों में सिद्धांतकार भी सरोगेट प्राथमिक कुंजी को रिलेशनल डेटा मॉडल के एक अविच्छेद्य भाग के रूप में मानने लगे हैं। यह मोटे तौर पर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग मॉडल से रिलेशनल मॉडल में हाइब्रिड ऑब्जेक्ट-रिलेशनल मॉडल बनाने के सिद्धांतों के प्रवासन के कारण है। ऑब्जेक्ट-रिलेशनल मैपिंग जैसे सक्रिय रिकॉर्ड पैटर्न में, प्राथमिक कुंजियों पर ये अतिरिक्त प्रतिबंध लगाए गए हैं:


 * प्राथमिक कुंजियाँ अपरिवर्तनीय होनी चाहिए, अर्थात, कभी भी परिवर्तित या पुन: उपयोग नहीं की जानी चाहिए; उन्हें संबंधित रिकॉर्ड के साथ हटा दिया जाना चाहिए।
 * प्राथमिक कुंजियाँ अनाम पूर्णांक या संख्यात्मक पहचानकर्ता होनी चाहिए।

हालाँकि, इनमें से कोई भी प्रतिबंध रिलेशनल मॉडल या किसी SQL मानक का हिस्सा नहीं है। डेटाबेस और एप्लिकेशन डिज़ाइन के दौरान प्राथमिक कुंजी मानों की अपरिवर्तनीयता पर निर्णय लेते समय उचित परिश्रम लागू किया जाना चाहिए। कुछ डेटाबेस सिस्टम का अर्थ यह भी है कि प्राथमिक कुंजी कॉलम में मान का उपयोग करके बदला नहीं जा सकता है  एसक्यूएल बयान।

वैकल्पिक कुंजी
आमतौर पर, एक उम्मीदवार कुंजी को प्राथमिक कुंजी के रूप में चुना जाता है। अन्य उम्मीदवार कुंजियाँ वैकल्पिक कुंजियाँ बन जाती हैं, जिनमें से प्रत्येक में एक हो सकता है  डुप्लीकेट को रोकने के लिए इसे असाइन की गई बाधा (एक डुप्लीकेट प्रविष्टि एक अद्वितीय कॉलम में मान्य नहीं है)। वैकल्पिक कुंजियों का उपयोग प्राथमिक कुंजी की तरह किया जा सकता है जब एकल-तालिका का चयन करते समय या जहाँ क्लॉज़ में फ़िल्टर किया जाता है, लेकिन आमतौर पर कई तालिकाओं में शामिल होने के लिए उपयोग नहीं किया जाता है।

यह भी देखें

 * प्राकृतिक कुंजी
 * सुपरकी
 * अनूठी कुंजी
 * उम्मीदवार कुंजी
 * संबंध का डेटाबेस
 * इकाई-संबंध मॉडल