15

मैं डेटाबेस प्रबंधन के लिए बिल्कुल नया हूं और इस प्रश्न का उत्तर एक से अधिक वाक्य में कभी नहीं दिया जाता है। अन्य सभी SO उत्तरों का कहना है "एक उम्मीदवार कुंजी एक न्यूनतम सुपर कुंजी है।" इसका मतलब मेरे लिए कुछ भी नहीं है।उम्मीदवार कुंजी का क्या मतलब है?

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

मैं निम्नलिखित की तरह उदाहरण के रिकॉर्ड को देखा है:

कर्मचारी (ID, नाम, फ़ोन नंबर)

जहां आईडी प्राथमिक कुंजी है और PhoneNumber एक उम्मीदवार कुंजी है। जो मैं देखता हूं, आईडी एक कर्मचारी रिकॉर्ड की विशिष्टता निर्दिष्ट करने के लिए पर्याप्त है। यद्यपि फोननबर्स (शायद) अद्वितीय हैं, उन्हें उम्मीदवार कुंजी के रूप में निर्दिष्ट करना मेरे लिए "न्यूनतम" प्रतीत नहीं होता है।

उत्तर

12

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

विकिपीडिया में formal definition है जो आप देखना चाहते हैं।

7

एक कुंजी को उम्मीदवार कुंजी कहा जाता है, क्योंकि इसे पीके के रूप में उपयोग किया जा सकता है, यह आवश्यक नहीं है कि पीके।

किसी पंक्ति, उदाहरण के लिए, EmployeeID और SSN के लिए एक से अधिक उम्मीदवार कुंजी नहीं हो सकता है।

अक्सर पीके के रूप में उम्मीदवार कुंजी का उपयोग करने के बजाय, surrogate key इसके बजाय बनाया गया है। ऐसा इसलिए है क्योंकि उपयोग करने के लिए उम्मीदवार कुंजी के आसपास के निर्णय गलत बाद में पाए जा सकते हैं, जो एक बड़ा सिरदर्द (शाब्दिक) का कारण बन सकता है।

एक अन्य कारण (एक UserImage उदा) कि एक किराए कुंजी अनुक्रमण प्रयोजनों के लिए एक कुशल डेटा प्रकार का उपयोग कर, जो उम्मीदवार कुंजी नहीं हो सकता है बनाया जा सकता है है।

एक तीसरा कारण यह है कि केवल एक एकल-स्तंभ पी, तो एक से अधिक स्तंभ (समग्र कुंजी) से बना उम्मीदवार कुंजी के साथ कई ORMs काम उस मामले में की संभावना से इनकार कर रहे हैं।

कुछ डेवलपर्स को यह नहीं पता कि natural key पर सरोगेट कुंजी का चयन डेटा अखंडता के मामले में एक समझौता हो सकता है। सरोगेट कुंजी चुनकर आप अपने डेटा पर कुछ बाधाओं को खो सकते हैं, और यदि सरोगेट कुंजी चुना जाता है तो बाधा को अनुकरण करने के लिए अक्सर एक ट्रिगर की आवश्यकता होती है।

+0

आपकी आखिरी पैरा। ** केवल ** यदि डेटा डुप्लिकेशन/सामान्यीकरण/अद्यतन विसंगतियों की कमी है। और अन्यथा नहीं। – PerformanceDBA

+0

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

0

एक "उम्मीदवार कुंजी" एक ही उम्मीदवार है कि राष्ट्रपति के उम्मीदवार उम्मीदवार हैं: वे आपके लिए प्रस्तुत विकल्प हैं, जिनसे आपको एक चुनना होगा। वे प्राथमिक कुंजी के लिए उम्मीदवार हैं। एक चुनें। अभ्यास में, सभी विकल्प जरूरी नहीं हैं कि वे समान रूप से अच्छे हों।

+0

वास्तव में नहीं, क्योंकि कोई मौलिक कारण नहीं है कि आपको किसी अन्य पर एक कुंजी "चुनना" क्यों है। एक माना जाता है कि "प्राथमिक" कुंजी होने का विचार अनिवार्य रूप से एक मनमाना विकल्प है जो सिद्धांत या अभ्यास में बहुत अंतर नहीं करता है। – sqlvogel

+0

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

+0

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

3

उम्मीदवार कुंजी एक अवधारणा है जो तब दिखाई देती है जब आप डेटाबेस सिस्टम डिज़ाइन कर रहे हों।

मान लीजिए आपके सिस्टम एक मेज नामित उपयोगकर्ता होगा, जैसा कि नीचे परिभाषित:

User (fullName, socialSecurityNumber, creditCardNumber, age). 

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

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

0

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

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

आगे कभी-कभी मल्टीप्ल फ़ील्ड या फ़ील्ड के संयोजन होते हैं जो अद्वितीय होना चाहिए। उदाहरण के लिए मान लीजिए कि आपके पास संगठन संरचना संग्रहित एक सारणी है। प्रत्येक संगठनात्मक इकाई अद्वितीय होनी चाहिए, इसलिए प्रत्येक संगठन/व्यक्ति संयोजन होना चाहिए (यह मानते हुए कि कोई नौकरी साझा नहीं है)। इन क्षेत्रों पर अद्वितीय इंडेक्स रखकर, आप खराब डेटा को तालिका में डालने से रोकने में सक्षम हैं।

3

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

ध्यान दें कि इस संदर्भ में न्यूनतम से कम से कम मतलब नहीं है। इसका मतलब है irreducible। यानी अपनी विशिष्टता बनाए रखने के दौरान कुंजी से कोई विशेषता हटाई जा सकती है।

0

हम उम्मीदवार कुंजी का उपयोग करते हैं, क्योंकि कुछ बार रिकॉर्ड और अन्य समस्या का ख्याल रखना आवश्यक है, उदाहरण के लिए बैंक सिस्टम के लिए डेटा बेस, जहां खाता_नो प्राथमिक कुंजी है और SocialSecurity_NO उम्मीदवार कुंजी होगी, हम SocialSecurity_NO रखते हैं अद्वितीय कुंजी के रूप में, क्योंकि यदि सरकार को SocialSecurity_NO प्रदान करने में कोई गलती हुई है, तो यह बड़ी समस्या होगी, इसलिए हमने इसे पहले से ही अद्वितीय कुंजी के रूप में घोषित कर दिया है, इसलिए कोई संभावना नहीं है कि दो उपयोगकर्ता एक ही सामाजिक Security_NO खाते के लिए सक्षम होंगे .. ।

प्राथमिक कुंजी ----------- उम्मीदवार कुंजी --------- attribute3 ------- attribute4

Account_No SocialSecurity_NO

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