स्पष्ट होने के लिए, यह प्रश्न और उत्तर सरोगेट कुंजी के लिए नकारात्मक संख्याओं का उपयोग करने के बारे में हैं, प्राकृतिक कुंजी के लिए नहीं।
जहां तक मुझे पता है, इसे खराब अभ्यास करने पर विचार करने के तीन कारण हैं।
- यह principle of least surprise का उल्लंघन करता है।
- कुछ लोग मानते हैं कि सभी आईडी नंबर गैर-ऋणात्मक हैं।
- कुछ लोग त्रुटियों को इंगित करने के लिए नकारात्मक संख्याओं का उपयोग करते हैं।
पहले व्यक्ति के पास इसकी कुछ वैधता है। आप SO पर SQL उदाहरण या उत्तर कभी नहीं देखते हैं जो नकारात्मक आईडी संख्याओं का उपयोग करते हैं। (मैं इसे बदलना चाहता हूं, आज से शुरू कर रहा हूं।)
दूसरा और तीसरा कोरोलरी पहले है, उस प्रोग्रामर में अक्सर आश्चर्यजनक व्यवहार होता है। (यह मुझे यह जानने की याद दिलाता है कि वीबीए मुझे दो तिथियों को गुणा करने देगी, मुझे लगता है कि एक संख्या को वापस कर दिया जाएगा, मुझे लगता है कि, वर्ग की तारीखों में, मुझे लगता है।)
नंबर 2 के लिए, एप्लिकेशन प्रोग्रामर कमरे की अनुमति नहीं देकर सूक्ष्म त्रुटियों का परिचय दे सकते हैं यूआई कोड में साइन, जो -123456 123456 की तरह दिख सकता है।
तीसरे को कोड कोड के साथ करना है जो आईडी नंबर देता है। कोड जो एक आईडी नंबर देता है -1 को एक त्रुटि कोड के रूप में वापस कर सकता है। लेकिन -1 ज्यादातर मामलों में एक मान्य आईडी संख्या है। (अधिकांश डेटाबेस आईडी संख्याओं को गैर-ऋणात्मक पूर्णांक की सीमा तक सीमित नहीं करते हैं।)
स्रोत
2012-01-21 19:14:04
क्या आपके पास इस "खराब अभ्यास" को दस्तावेज करने के लिए कुछ भी है? मुझे लगता है कि नकारात्मक संख्याएं पढ़ने के लिए अधिक अप्रिय हैं, और टाइप करने के लिए थोड़ा कठिन है। मैं वास्तव में उनसे बचने के लिए कोई तकनीकी कारण नहीं देख सकता हूं। वास्तव में यह एक हस्ताक्षरित डेटा प्रकार की सीमा का विस्तार करने का एक शानदार तरीका है। – Yuck
तरफ, यह क्लाइंट पक्ष पर रिकॉर्ड बनाने के दौरान उपयोगी होता है जिसे बाद में सर्वर पर डालने की आवश्यकता होती है: http://msdn.microsoft.com/en-us/library/ms971502.aspx – Niklas
मुझे लगता है कि यह लोकप्रिय है कि ऋणात्मक संख्याओं को 'बुरा व्यवहार' माना जाता है, कुछ 'बदसूरत' से 'बचें'। यही है ना लेकिन मैं वास्तव में नहीं देख सकता क्यों ... फिर, @Yuck, आपको लगता है कि यह पठनीयता की वजह से है? – falsarella