यह एक अत्यधिक बहस सवाल है, दोनों पक्षों पर भावना की बहुत सारी के साथ है।
मेरी विनम्र राय में, वहाँ एक अच्छा, useable प्राकृतिक उपलब्ध कुंजी है अगर - एक ISBN की तरह - मैं इसे का उपयोग करें। मैं इसे डेटाबेस पर वैसे भी स्टोर करने जा रहा हूं। हां, एक प्राकृतिक कुंजी आमतौर पर एक पूर्णांक ऑटो-वृद्धि कुंजी से बड़ी होती है, लेकिन मुझे लगता है कि यह समस्या अधिक है। डिस्क स्थान आज सस्ता है। मैं प्रक्रिया के लिए अधिक समय ले रहा है इसके बारे में और अधिक चिंता करेंगे। यदि आप प्राथमिक कुंजी के रूप में 80 बाइट टेक्स्ट फ़ील्ड के बारे में बात कर रहे थे, तो मैं नहीं कहूंगा। लेकिन अगर आप 8-बाइट बड़े पूर्णांक के बजाय 10-बाइट आईएसबीएन का उपयोग करने की सोच रहे हैं, तो मैं कल्पना नहीं कर सकता कि प्रदर्शन प्रदर्शन में काफी अधिक आती है।
कभी-कभी प्राकृतिक कुंजी के लिए एक प्रदर्शन लाभ है। मान लीजिए, उदाहरण के लिए, मैं यह जानना चाहता हूं कि किसी दिए गए पुस्तक की कितनी प्रतियां बेची गई हैं। मुझे पुस्तक मास्टर रिकॉर्ड से किसी भी डेटा की परवाह नहीं है। यदि प्राथमिक कुंजी आईएसबीएन है, तो मैं बस "चयन गिनती (*) बिक्री से कहां लिख सकता हूं जहां isbn = '143573338X'" है। अगर मैं एक autoincrement कुंजी इस्तेमाल किया, मैं एक isbn को देखने के लिए शामिल होने के क्या करना है, और क्वेरी, "चयन गिनती (*) की तरह की किताब से उपयोग करते हुए बिक्री में शामिल होने के और अधिक जटिल और धीमी हो जाता है (bookid) जहां isbn = '143573338X' "। (और मैं आपको विश्वास दिलाता कर सकते हैं कि के रूप में इस विशेष ISBN मेरी किताब के लिए है, बिक्री के रिकॉर्ड की संख्या बहुत कम है, इसलिए शामिल हो कर और एक अतिरिक्त रिकॉर्ड एक बड़ा अंतर का प्रतिशत पढ़ रही है!)
प्राकृतिक का एक और लाभ कुंजी यह है कि जब आपको डेटाबेस पर काम करना होता है और आप उन रिकॉर्ड्स को देखते हैं जो इस तालिका को कुंजी द्वारा वापस संदर्भित करते हैं, तो यह देखना आसान है कि वे किस रिकॉर्ड का जिक्र कर रहे हैं।
दूसरी ओर, अगर कोई अच्छा, स्पष्ट प्राकृतिक कुंजी है, एक साथ एक पागल एक पक्की सड़क के लिए प्रयास न करें। मैंने देखा है लोगों को ग्राहकों पहला नाम, उनके जन्म की साल है, और उसकी जिप कोड के पहले 6 पत्र एक साथ श्रृंखलाबद्ध द्वारा एक प्राकृतिक कुंजी बनाने की कोशिश करें, और उसके प्रार्थना करता हूँ कि कि अद्वितीय होगी। उस तरह की उदासीनता सिर्फ आपके लिए परेशानी पैदा कर रही है। अक्सर लोग अनुक्रम संख्या लेने के लिए इसे अनूठा बीमा करने के लिए समाप्त होते हैं, और उस बिंदु पर, परेशान क्यों? कुंजी के रूप में अनुक्रम संख्या का उपयोग क्यों न करें?
+1 मैं लोगों को क्या कहते हैं देखने के लिए इस –
इस सवाल के बारे में, विभिन्न रूपों में रुचि है, कुछ हद तक बारहमासी है ... http://stackoverflow.com/questions/532363/native-primary-key-or देखना उदाहरण के लिए एक-उत्पन्न-एक। – mjv
यह वास्तव में एक उत्तर के लायक नहीं है लेकिन मेरी राय है: यदि आप पूरी तरह से सुनिश्चित हैं कि आपके पास एक ही आईएसबीएन या दो एसएसएन वाले दो व्यक्तियों के साथ दो पुस्तकें नहीं होंगी, तो मैं उन मानों को प्राथमिक कुंजी के रूप में उपयोग करने में संकोच नहीं करूंगा । लेकिन यह मुझे लगता है कि केवल एक आदत है। Django के मॉडल जैसे कुछ ओआरएम सिस्टम इसे करने के लिए कड़ी मेहनत करते हैं और हमेशा संख्यात्मक वृद्धिशील आईडी होने पर जोर देते हैं। दूसरी ओर, यदि आप PostgreSQL पर हैं, तो आप * दोहरी प्राथमिक कुंजी * जैसी चीजें भी कर सकते हैं। जब भी मैं कर सकता हूं मैं उनका उपयोग करना पसंद करता हूं। –