मानक SQL डेटाबेस का उपयोग करने के लिए कुछ हद तक नया (वर्तमान में ज्यादातर MySQL के साथ काम कर रहा है) मैं अभी तक इसके कई उपयोगों में नहीं चला हूं।
तालिका को अनुक्रमित करते समय नकारात्मक (या हस्ताक्षरित) कुंजियों का होना कब और क्यों उपयोगी है?
मानक SQL डेटाबेस का उपयोग करने के लिए कुछ हद तक नया (वर्तमान में ज्यादातर MySQL के साथ काम कर रहा है) मैं अभी तक इसके कई उपयोगों में नहीं चला हूं।
तालिका को अनुक्रमित करते समय नकारात्मक (या हस्ताक्षरित) कुंजियों का होना कब और क्यों उपयोगी है?
जवाबों:
सभी प्राथमिक कुंजी एक मूल्य है जिसे हमने निर्धारित किया है वह मूल्य है जो एक रिकॉर्ड में अत्यंत महत्व का है। चाहे वह कुंजी एक हस्ताक्षरित int, एक अहस्ताक्षरित int, एक स्ट्रिंग, एक बूँद (वास्तव में, सीमाएं हैं) या एक UUID (या जो भी नाम आज लेता है), तथ्य अभी भी खड़ा है कि यह एक कुंजी है, और यह है कि अत्यंत महत्व की बात।
चूंकि हम अपनी कुंजियों के लिए केवल सकारात्मक उन्मुख संख्याओं का उपयोग करने के लिए विवश नहीं हैं, इसलिए यह विचार करने के लिए समझ में आता है कि एक हस्ताक्षरित इंट केवल ~ 2 बिलियन जाएगा, जबकि एक अहस्ताक्षरित int ~ 4 बिलियन जाएगा। लेकिन एक हस्ताक्षरित इंट का उपयोग करने के साथ कुछ भी गलत नहीं है, प्रारंभिक मूल्य ~ -2 बिलियन और एक की वृद्धि सेट करना। ~ 2 बिलियन रिकॉर्ड के बाद आप "शून्य" पर पहुंचेंगे और फिर आप ~ 2 बिलियन तक जारी रहेंगे।
जैसे कि टेबल में "नेगेटिव कीज" होना मददगार होगा, वैसे ही यह सवाल है कि "टेबल में कीज़ रखना उपयोगी क्यों है"। एक कुंजी के "मूल्य" का एक कुंजी के रूप में इसकी स्थिति पर कोई प्रभाव नहीं पड़ता है। एक कुंजी एक कुंजी है एक कुंजी है।
यदि कुंजी वैध है तो क्या महत्वपूर्ण है।
जैसा कि यह महत्वपूर्ण है कि कुंजी नकारात्मक होने की अनुमति देने के लिए उपयोगी होगा, मैं कुछ कारणों का सुझाव दे सकता हूं:
क्या होगा यदि आप बिक्री तंत्र में नकारात्मक बिक्री आदेश संख्याओं के रूप में रिटर्न इंगित करना चाहते हैं, जो कि सकारात्मक बिक्री क्रम संख्या से मेल खाता है, इस प्रकार सहसंबंध को आसान बनाता है (यह भोला है, और खराब तरीके से डिज़ाइन किया गया है, लेकिन यह "स्प्रेडशीट" अर्थ में काम करेगा)।
क्या होगा यदि आप एक उपयोगकर्ता तालिका चाहते थे, और इंगित करें कि नकारात्मक संख्या वाले सिस्टम को नियंत्रित किया गया था (तो एसओ यह बहुत काम करता है, चैट फीड के लिए)।
मैं आगे बढ़ सकता था, लेकिन वास्तव में एकमात्र कारण है कि संख्या का नकारात्मक होना महत्वपूर्ण है अगर आप या मैं इसे महत्व देते हैं। इसके अलावा, कुंजी के मूल्य का कोई बड़ा कारण नहीं है कि कुंजी पर कोई असर पड़े।
यदि हम पहचान या ऑटोनम्बर कॉलम के बारे में हैं, तो मान का कोई अर्थ नहीं होना चाहिए। (कभी-कभी ऐसा होता है, एसओ के चैट उपयोगकर्ताओं के अनुसार, जिसे मैंने खुद से पहले किया है
हालाँकि, यदि आप हस्ताक्षर किए गए पूर्णांक का उपयोग कर रहे हैं, तो आमतौर पर आप अपनी सीमा का आधा हिस्सा खो देंगे।
देखें: क्या करना है जब एक तालिका में एक क्षेत्र अधिकतम हस्ताक्षरित या अहस्ताक्षरित 32 बिट पूर्णांक तक पहुंचता है?
एक और उदाहरण: छोटे प्रतिकृति परिदृश्यों में, एक साइट के लिए नकारात्मक मूल्यों का उपयोग करना और दूसरे के लिए सकारात्मक किसी भी पंक्ति के स्रोत का कुछ अंतर्निहित ज्ञान देता है।
NOT FOR REPLICATION
आप जानते हैं कि एक MySQL (या अन्य) एनालॉग है?
सभी डेटाबेस सिस्टम अहस्ताक्षरित पूर्णांक प्रकारों का समर्थन नहीं करते हैं, MSSQL उन में से एक है जो नहीं करता है। इन मामलों में पूर्णांक कुंजी फ़ील्ड में नकारात्मक मान संभव हैं, क्योंकि वे इस प्रकार में संभव हैं (आप उन्हें ब्लॉक करने के लिए नियमों या ट्रिगर्स का उपयोग कर सकते हैं, जैसा कि इस उदाहरण में दिखाया गया है , लेकिन संभवतः ऐसे नियमों को लागू करने के ओवरहेड को जोड़ने की आवश्यकता नहीं है हर ब्लॉक / अद्यतन)।
जहां तक डेटाबेस का संबंध है, एक प्राथमिक कुंजी का वास्तविक मूल्य तब तक मायने नहीं रखता है जब तक यह तालिका के भीतर अद्वितीय है। इसके लिए -42 और 42 एक ही तरह से दो अलग-अलग संख्याएँ हैं 42 और 69 हैं - अर्थ केवल नकारात्मकता पर लगाया जाएगा या आपके कोड द्वारा मूल्य का नहीं।
अहस्ताक्षरित पूर्णांक प्रकारों का समर्थन नहीं करना संभवतः जटिलता को कम करने के आधार पर एक डिजाइन निर्णय है - अर्थात उन दोनों के बीच मान निर्दिष्ट करते समय श्रेणियों की जाँच के बारे में चिंता करने के लिए दो अलग-अलग 32 बिट पूर्णांक प्रकार नहीं चाहते हैं। यह एक 0 या 1 से शुरू होने वाले ऑटो वेतन वृद्धि क्षेत्र में संभव इंडेक्स की संख्या को सीमित करता है जो एक अहस्ताक्षरित प्रकार में संभव होगा (~ 4e9 के बजाय ~ 2e9) लेकिन यह शायद ही कभी एक महत्वपूर्ण मुद्दा है (यदि आपको आवश्यकता होने की संभावना है उस परिमाण के कई प्रमुख मूल्य शायद आप वैसे भी 64-बिट प्रकार के लिए गए थे, खासकर यदि 64-बिट आर्किटेक्चर का उपयोग करते हुए जहां ऐसे मूल्यों को कम कुशलता से संसाधित नहीं किया जाता है, तो 32-बिट वाले) हालांकि अगर आप पूरी रेंज और आवश्यकता चाहते हैं अंतरिक्ष कारणों से 32-बिट से चिपके रहने के लिए आप वेतन वृद्धि -2,147,483,647 पर शुरू कर सकते हैं।