यहां कई ट्रेडऑफ हैं। वास्तव में मैं अक्सर स्ट्रिंग कुंजियों का उपयोग करता हूं, लेकिन अक्सर मैं जॉन्स के लिए सरोगेट द्वितीयक कुंजियों को शामिल करता हूं (जाहिर है कि यह आसपास का दूसरा तरीका होगा यदि मैं MySQL का उपयोग कर रहा था)। ऐसे मामले हैं जहां मैं हालांकि नहीं।
पहले मैं प्राकृतिक कुंजी को प्राथमिक कुंजी घोषित करने का प्रशंसक हूं, जहां db इसे अच्छी तरह से संभाल सकता है (उदाहरण के लिए PostgreSQL)। यह सामान्यीकरण में मदद करता है और स्पष्ट डेटाबेस डिजाइन के लिए बनाता है। सरोगेट कुंजियाँ जुड़ने को आसान बनाती हैं।
आम तौर पर सरोगेट कुंजी जोड़ने के दो कारण हैं:
यह हमेशा स्पष्ट नहीं होता है कि प्राकृतिक कुंजी क्या है। कभी-कभी इन्हें बदलना पड़ता है। जब जोड़ और संदर्भात्मक अखंडता के लिए उपयोग किया जाता है, तो एक प्राकृतिक, समग्र कुंजी को बदलना जटिल और त्रुटि प्रवण होता है।
संयुक्त कुंजी पर प्रदर्शन में शामिल होना समस्याग्रस्त है और एक बार जब आप प्राकृतिक कुंजी मार्ग से नीचे जाते हैं, तो आप वहां फंस जाते हैं।
उन मामलों में जहां एक प्राकृतिक कुंजी निश्चित है, एकल कॉलम, और पाठ, हालांकि, मैं आमतौर पर स्ट्रिंग कुंजी में शामिल होता हूं। ऐसा करने का मेरा कारण यह है कि यह अक्सर लुकअप में शामिल होने से बचता है। सबसे आम उपयोग एनम प्रकारों के उपयोग के मामले में उचित डीबी डिजाइन प्रदान कर रहा है। ज्यादातर मामलों में, इन्हें नियमित प्रश्नों के अतिरिक्त जुड़ाव की आवश्यकता नहीं होती है। तो जहाँ यह मामला है, कुंजी जोड़ने के रूप में स्ट्रिंग कुंजी सही समझ में आता है।
LedgerSMB में उदाहरण के लिए, हम खाता वर्गीकरण संग्रहीत करते हैं। इन्हें स्ट्रिंग संदर्भ द्वारा रखा जाता है। और कुछ अन्य डेटा को स्ट्रिंग संदर्भ के साथ संग्रहीत किया जाता है जिसका उपयोग उन वर्गीकरणों के संयोजन के बारे में नियमों को लागू करने के लिए किया जाता है जो किसी खाते को प्रभावित कर सकते हैं। केवल उस समय तर्क की आवश्यकता होती है जब वर्गीकरण के एक सेट को सहेजते समय, इसलिए हम स्ट्रिंग कुंजी में शामिल होते हैं।
के रूप में क्यों डिफ़ॉल्ट पूर्णांक कुंजी होगा, मुझे नहीं लगता कि यह सिर्फ सूचकांक आकार का सवाल है। एक बड़ा मुद्दा कुंजी का प्रबंधन है। चूंकि कुंजी मनमानी है और आप लाखों रिकॉर्डों के साथ काम कर रहे हैं, इसलिए आपके पास अद्वितीय तार पैदा करने का एक तरीका होना चाहिए। ऐसे मामले हैं जहां लोग इसके लिए यूयूआईडी का उपयोग करते हैं, लेकिन यूयूआईडी टकराव की एक गैर-शून्य संभावना है, और जहां अरबों रिकॉर्ड संग्रहीत किए जाते हैं, यह मौका पर्याप्त रूप से उच्च हो जाता है, जो वास्तव में देख सकता है जबकि वेतन वृद्धि पूर्णांक प्रकारों के साथ टकराव की संभावना शून्य है परिभाषा से।