मुझे ऐसा उत्तर नहीं दिखाई देता है जो वास्तव में मौलिक बिंदु - (जैसा कि मेरा संबंध है) - यह बताता है कि एक प्राथमिक कुंजी यह गारंटी देती है कि आपको एक ही वास्तविक विश्व इकाई के लिए तालिका में दो प्रविष्टियां नहीं मिलेंगी (जैसा कि डेटाबेस में प्रतिरूपित)। यह अवलोकन यह स्थापित करने में मदद करता है कि प्राथमिक कुंजी के लिए क्या अच्छे हैं और क्या बुरे विकल्प हैं।
उदाहरण के लिए, (यूएस) राज्य के नामों और कोडों की एक तालिका में, या तो नाम या कोड प्राथमिक कुंजी हो सकता है - वे दो अलग-अलग उम्मीदवार कुंजी बनाते हैं, और उनमें से एक (सामान्य रूप से छोटा - कोड) को चुना जाता है प्राथमिक कुंजी। कार्यात्मक निर्भरता के सिद्धांत में (और निर्भरता में शामिल हों - 1NF 5NF के माध्यम से - यह उम्मीदवार कुंजी है जो प्राथमिक कुंजी के बजाय महत्वपूर्ण है।
एक काउंटर-उदाहरण के लिए, मानव नाम आमतौर पर प्राथमिक कुंजी के लिए एक बुरा विकल्प बनाते हैं। कई लोग हैं जो "जॉन स्मिथ" या कुछ अन्य समान नामों से जाते हैं; यहां तक कि मध्य नामों को ध्यान में रखते हुए (याद रखें: हर किसी के पास एक नहीं है - उदाहरण के लिए, मैं नहीं), नकल के लिए बहुत गुंजाइश है। नतीजतन, लोग प्राथमिक कुंजी के रूप में नामों का उपयोग नहीं करते हैं। वे सामाजिक सुरक्षा संख्या (SSN) या कर्मचारी संख्या जैसी कृत्रिम कुंजी का आविष्कार करते हैं और व्यक्ति को नामित करने के लिए उनका उपयोग करते हैं।
एक आदर्श प्राथमिक कुंजी छोटी, अनोखी, यादगार और प्राकृतिक है। इन विशेषताओं में से विशिष्टता अनिवार्य है; बाकी को वास्तविक विश्व डेटा की बाधाओं को देखते हुए फ्लेक्स करना होगा।
जब किसी दी गई तालिका की प्राथमिक कुंजी निर्धारित करने की बात आती है, इसलिए, आपको यह देखना होगा कि वह तालिका क्या दर्शाती है। तालिका में स्तंभ मानों का क्या सेट या सेट विशिष्ट रूप से तालिका में प्रत्येक पंक्ति की पहचान करता है? वे उम्मीदवार कुंजी हैं। अब, यदि प्रत्येक उम्मीदवार की कुंजी में 4 या 5 कॉलम होते हैं, तो आप यह तय कर सकते हैं कि वे एक अच्छी प्राथमिक कुंजी (मुख्य रूप से लघुता के आधार पर) बनाने के लिए बहुत अनाड़ी हैं। उन परिस्थितियों में, आप एक सरोगेट कुंजी शुरू कर सकते हैं - एक कृत्रिम रूप से उत्पन्न संख्या। बहुत बार (लेकिन हमेशा नहीं) सरोगेट कुंजी के लिए एक साधारण 32-बिट पूर्णांक पर्याप्त है। आप तब इस सरोगेट कुंजी को प्राथमिक कुंजी के रूप में नामित करते हैं।
हालाँकि, आपको अभी भी यह सुनिश्चित करना होगा कि अन्य उम्मीदवार कुंजी (सरोगेट कुंजी के लिए एक उम्मीदवार कुंजी भी है, साथ ही साथ चुना प्राथमिक कुंजी) सभी को अद्वितीय पहचानकर्ता के रूप में बनाए रखा जाता है - आम तौर पर कॉलम के उन सेटों पर एक अद्वितीय बाधा डालकर।
कभी-कभी, लोगों को यह पहचानना मुश्किल हो जाता है कि कौन सी पंक्ति अद्वितीय बनाती है, लेकिन ऐसा करने के लिए कुछ होना चाहिए, क्योंकि बस जानकारी के एक टुकड़े को दोहराने से यह और अधिक सच नहीं होता है। और अगर आप सावधान नहीं हैं और एक ही जानकारी को संग्रहीत करने के लिए दो (या अधिक) पंक्तियाँ प्राप्त कर रहे हैं, और आपको फिर जानकारी को अपडेट करने की आवश्यकता है, तो एक खतरा है (विशेषकर यदि आप कर्सर का उपयोग करते हैं) तो आप सिर्फ एक पंक्ति को अपडेट करेंगे प्रत्येक पंक्ति के बजाय, इसलिए पंक्तियाँ समकालिकता से बाहर हैं और कोई भी नहीं जानता कि किस पंक्ति में सही जानकारी है।
यह कुछ मामलों में एक बहुत ही कठिन दृश्य है।
मुझे GUID का उपयोग करने की कोई विशेष समस्या नहीं है जब उनकी आवश्यकता होती है, लेकिन वे बड़े होते हैं (16-64 बाइट्स में), और उनका उपयोग अक्सर किया जाता है। बहुत बार एक अच्छा 4-बाइट मान पर्याप्त होगा। GUID का उपयोग करना जहां एक 4-बाइट मान डिस्क स्थान को बर्बाद कर देगा, और डेटा तक अनुक्रमित पहुंच को धीमा कर देगा क्योंकि प्रति सूचकांक पृष्ठ पर कम मान हैं, इसलिए सूचकांक अधिक गहरा होगा और अधिक पृष्ठों को पढ़ने के लिए पढ़ना होगा जानकारी।