प्राथमिक कुंजी के बारे में क्या खास है?
स्कीमा में तालिका का उद्देश्य क्या है? तालिका की कुंजी का उद्देश्य क्या है? प्राथमिक कुंजी के बारे में क्या खास है? प्राथमिक कुंजी के आस-पास की चर्चा इस बिंदु को याद करने लगती है कि प्राथमिक कुंजी एक तालिका का हिस्सा है, और वह तालिका स्कीमा का हिस्सा है। टेबल और टेबल रिलेशनशिप के लिए जो सबसे अच्छा है, उसका उपयोग उस कुंजी को चलाना चाहिए।
सारणी (और तालिका संबंध) में आपके द्वारा रिकॉर्ड की जाने वाली जानकारी के बारे में तथ्य होते हैं। ये तथ्य स्व-निहित, अर्थपूर्ण, आसानी से समझे जाने वाले और गैर-विरोधाभासी होने चाहिए। एक डिज़ाइन परिप्रेक्ष्य से, स्कीमा से जोड़ी गई या हटा दी गई अन्य तालिकाओं को प्रश्न में तालिका पर प्रभाव नहीं डालना चाहिए। केवल सूचना से संबंधित डेटा संग्रहीत करने के लिए एक उद्देश्य होना चाहिए। एक तालिका में संग्रहीत क्या है यह समझना वैज्ञानिक अनुसंधान परियोजना से गुजरने की आवश्यकता नहीं होनी चाहिए। एक ही उद्देश्य के लिए संग्रहीत कोई भी तथ्य एक से अधिक बार संग्रहीत नहीं किया जाना चाहिए। कुंजी दर्ज की जा रही जानकारी का एक पूरा या एक हिस्सा है जो अद्वितीय है, और प्राथमिक कुंजी विशेष रूप से निर्दिष्ट कुंजी है जो तालिका के लिए प्राथमिक पहुंच बिंदु है (यानी इसे डेटा संगतता और उपयोग के लिए चुना जाना चाहिए, न कि केवल सम्मिलित करना प्रदर्शन)।
- ASIDE: दुर्भाग्य से अधिकांश डेटाबेस का डिज़ाइन और विकास प्रोग्राम प्रोग्रामर्स (जो मैं कभी-कभी कर रहा हूं) द्वारा किया जाता है, यह है कि एप्लिकेशन या एप्लिकेशन फ्रेमवर्क के लिए जो सबसे अच्छा है, वह अक्सर टेबल के लिए प्राथमिक कुंजी विकल्प को ड्राइव करता है। यह पूर्णांक और GUID कुंजियों की ओर जाता है (जैसा कि ये एप्लिकेशन फ्रेमवर्क के लिए उपयोग करने के लिए सरल हैं) और अखंड टेबल डिजाइन (क्योंकि ये मेमोरी में डेटा का प्रतिनिधित्व करने के लिए आवश्यक एप्लिकेशन फ्रेमवर्क ऑब्जेक्ट की संख्या को कम करते हैं)। बड़े पैमाने पर उपयोग किए जाने पर ये एप्लिकेशन संचालित डेटाबेस डिज़ाइन निर्णय महत्वपूर्ण डेटा संगतता समस्याओं को जन्म देते हैं। इस तरह से डिज़ाइन किए गए एप्लिकेशन फ्रेमवर्क स्वाभाविक रूप से एक समय डिज़ाइन पर तालिका की ओर ले जाते हैं। "आंशिक रिकॉर्ड" टेबल और समय के साथ भरे गए डेटा में बनाए जाते हैं। मल्टी-टेबल इंटरैक्शन से परहेज किया जाता है या जब एप्लिकेशन अनुचित तरीके से काम करता है तो असंगत डेटा का कारण बनता है। इन डिज़ाइनों से डेटा होता है जो अर्थहीन (या समझने में मुश्किल) होता है, डेटा टेबल पर फैल जाता है (आपको वर्तमान टेबल की समझ बनाने के लिए अन्य तालिकाओं को देखना होगा), और डुप्लिकेट किए गए डेटा।
यह कहा गया था कि प्राथमिक कुंजी आवश्यक के रूप में छोटी होनी चाहिए। मैं कहूंगा कि चाबियाँ केवल आवश्यकतानुसार बड़ी होनी चाहिए। बेतरतीब ढंग से अर्थहीन क्षेत्रों को एक तालिका में जोड़ने से बचना चाहिए। बेतरतीब ढंग से जोड़े गए अर्थहीन क्षेत्र से बाहर चाबी बनाने के लिए और भी बुरा है, खासकर जब यह अन्य तालिका से गैर-प्राथमिक कुंजी में शामिल निर्भरता को नष्ट कर देता है। यदि तालिका में कोई अच्छा उम्मीदवार कुंजी नहीं है तो यह उचित है, लेकिन यह घटना निश्चित रूप से खराब स्कीमा डिज़ाइन का संकेत है यदि सभी तालिकाओं के लिए उपयोग किया जाता है।
यह भी कहा गया था कि प्राथमिक कुंजी को कभी नहीं बदलना चाहिए क्योंकि प्राथमिक कुंजी को अपडेट करने से हमेशा सवाल से बाहर रहना चाहिए। लेकिन अपडेट डालने के बाद डिलीट के समान है। इस तर्क द्वारा, आपको कभी भी एक कुंजी के साथ एक तालिका से एक रिकॉर्ड नहीं हटाना चाहिए और फिर दूसरी कुंजी के साथ एक और रिकॉर्ड जोड़ना चाहिए। सरोगेट प्राथमिक कुंजी जोड़ने से इस तथ्य को दूर नहीं किया जाता है कि तालिका में अन्य कुंजी मौजूद है। किसी तालिका की गैर-प्राथमिक कुंजी को अपडेट करना डेटा के अर्थ को नष्ट कर सकता है यदि अन्य तालिकाओं में एक सरोगेट कुंजी के माध्यम से उस अर्थ पर निर्भरता है (जैसे एक सरोगेट कुंजी के साथ एक स्थिति तालिका जिसमें 'विवरण' से 'स्थिति' में बदल दिया गया है) रद्द कर दिया गया 'निश्चित रूप से डेटा को भ्रष्ट करेगा)। हमेशा सवाल से बाहर होना चाहिए डेटा अर्थ को नष्ट कर रहा है।
यह कहने के बाद, मैं कई खराब डिज़ाइन किए गए डेटाबेस के लिए आभारी हूं जो आज व्यवसायों में मौजूद हैं (अर्थहीन-सरोगेट-कुंजी-डेटा-दूषित -१ एनएफ किन्नर), क्योंकि इसका मतलब है कि लोगों के लिए एक अंतहीन राशि है जो उचित डेटाबेस डिज़ाइन को समझते हैं । लेकिन दुखद पक्ष पर, यह कभी-कभी मुझे साइसेफस की तरह महसूस करता है, लेकिन मैंने शर्त लगाई कि उसके पास एक दुर्घटनाग्रस्त (दुर्घटना से पहले) 401k की एक बिल्ली थी। महत्वपूर्ण डेटाबेस डिजाइन प्रश्नों के लिए ब्लॉग और वेबसाइटों से दूर रहें। यदि आप डेटाबेस डिजाइन कर रहे हैं, तो CJ Date देखें। आप SQL सर्वर के लिए Celko को भी संदर्भित कर सकते हैं, लेकिन केवल तभी जब आप अपनी नाक को पकड़ते हैं। ओरेकल की ओर, संदर्भ टॉम Kyte।