2009-02-10 15 views
5

एक नियम के रूप में देशी प्राथमिक कुंजी (यानी मौजूदा कॉलम या स्तंभों के संयोजन) का उपयोग करना बेहतर है या अपनी प्राथमिक कुंजी को पूर्णांक की ऑटो जनरेटिंग पंक्ति में सेट करना है?मूल प्राथमिक कुंजी या ऑटो उत्पन्न एक?

संपादित करें:
ऐसा नहीं है कि यह बहुत ही इसी तरह की this question को मेरे लिए मुद्दा उठाया गया।

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

हालांकि यहां दिए गए उत्तरों सभी सहायक हैं, उनमें से अधिकतर व्यक्तिपरक "यहां आपको क्या चाहिए" पर आधारित हैं, और सहायक स्रोतों का हवाला देते हैं। क्या मुझे कुछ आवश्यक पढ़ना याद आ रहा है या सर्वोत्तम प्रथाओं डेटाबेस डिजाइन अत्यधिक व्यक्तिपरक और/या आवेदन निर्भर हैं?

उत्तर

4
+0

धन्यवाद, मैंने इस सवाल पूछने से पहले कई खोज की, टैग आदि देखा, लेकिन इनमें से कोई भी खुला नहीं। –

+2

हाँ एसओ खोज है ... महान नहीं है। आपको सॉर्टा को पता होना चाहिए कि मैं क्या करना चाहता हूं या क्या करता हूं और इसे Google में टाइप करें: साइट: stackoverflow.com खोज शब्द – cletus

1

जो भी हो, इसे गैर सार्थक (सरोगेट कुंजी) बनाएं। अर्थपूर्ण प्राथमिक कुंजी घातक हैं।

+0

आप इस आगे समझा सकते हैं? "सार्थक" से आपका क्या मतलब है? –

+0

मुझे लगता है कि ई-मेल को 'सार्थक' प्राथमिक कुंजी के रूप में माना जा सकता है – Valentin

+0

अर्थपूर्ण - सामान्य उदाहरण: एसएसएन। कुंजी को कोई बाहरी व्यवसाय अर्थ नहीं लेना चाहिए। –

0

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

+0

कोई विचार नहीं कि आप क्यों संशोधित हो गए हैं, इसलिए मैंने इसका उत्तर दोहराया है, भले ही आपका उत्तर दोहराया जाए। –

1

यह शुद्धवादियों और व्यावहारिकवादियों के बीच एक पुराना युद्ध है। पुरी सरोगेट प्राथमिक कुंजी स्वीकार नहीं करते हैं और केवल प्राकृतिक लोगों का उपयोग करने पर जोर देते हैं। यदि आप मुझसे पूछते हैं, तो मैं ज्यादातर स्थितियों में वृद्धि (सरोगेट कुंजी) के लिए वोट दूंगा।

8

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

  1. विशिष्ट एक पंक्ति की पहचान करनी चाहिए।
  2. डेटा शामिल होना चाहिए नहीं है, या यह बदल जाएगा, जब आपके डेटा में परिवर्तन (जो बुरा है)
  3. संचालन की तुलना में तेजी से होना चाहिए (जहां खंड/मिलती है)

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

अभी भी शर्तों को पूरा करने के लिए न्यूनतम संख्या में फ़ील्ड से प्राथमिक कुंजी बनाई जानी चाहिए 1.-3। टेबल के विशाल बहुमत के लिए यह न्यूनतम है: 1 फ़ील्ड।

संबंध तालिकाओं (या बहुत विशेष किनारे के मामलों के लिए), यह अधिक हो सकता है। एक समग्र प्राथमिक कुंजी वाली तालिका का संदर्भ बोझिल है, इसलिए किसी तालिका के लिए एक समग्र कुंजी की अनुशंसा नहीं की जाती है जिसे इसके संदर्भ में संदर्भित किया जाना चाहिए।

संबंध तालिकाओं (एम: एन संबंध) में आप संबंधित तालिकाओं की प्राथमिक कुंजी से एक समग्र कुंजी बनाते हैं, इसलिए आपकी समग्र कुंजी स्वचालित रूप से उपरोक्त सभी तीन स्थितियों को पूरा करती है।

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

+0

यदि कोई डेटा नहीं है तो आप मूल प्राथमिक कुंजी कैसे बना सकते हैं? –

+0

@ निमो: आप एक कृत्रिम कुंजी बनाते हैं: एक संख्या, या एक GUID। डेटा रिकॉर्ड पेलोड है, मैं डेटा को डेटा के रूप में नहीं मानता हूं। – Tomalak

+0

बस सुधार का एक बिंदु - सरोगेट कुंजी डेटा से कभी नहीं बनाई जाती है - वे अपरिवर्तनीय हैं। – RedFilter

2

हमेशा इनट्स।

आप वैसा ही किया, जब यह समय पार करने के लिए है अन्य तालिकाओं में उन तत्वों को संदर्भित (विदेशी कुंजी का उपयोग कर)

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