मैंने इस बारे में सोचा कि यह थोड़ा सकारात्मक होने की कोशिश कर रहा है और एक अशक्त के बजाय एक मनमाना मूल्य का उपयोग करने की आवश्यकता को उचित ठहराता है और ऐसा लगता है (कम से कम मेरे लिए) इसके लिए कोई वैध कारण नहीं है, सिवाय शायद एक बंद डेटा-खनन डेटासेट में प्रदर्शन और प्रश्नों को सुधारने और सरल बनाने के लिए, और फिर केवल उन मामलों में जहां संख्याएं मूल्य नहीं हैं जो डेटा को तिरछा कर सकते हैं। यहां तक कि इस पर सावधानी से विचार करना होगा। सभी वास्तविक दुनिया की स्थितियों में शून्य का मूल्य देना अच्छी प्रथा नहीं है। यह आपके मित्र से आपके शत्रु के लिए नॉट कॉलम कॉलम की परिभाषा को बदल देता है क्योंकि यह वास्तव में सच नहीं है।
यह कहना बहुत अलग बात है कि हमारे आवेदन को कुछ (या यहां तक कि सभी) कॉलमों के लिए NULL मान स्वीकार नहीं करना चाहिए। यह समझदारी और अच्छी प्रैक्टिस है और नल (कुंजियाँ और सूचकांक और उदाहरण के लिए सांख्यिकीय गणना) की अनुमति नहीं देने के लिए अच्छी तरह से प्रलेखित लाभ हैं। हालांकि, एक अशक्त के "जगह में बैठने" के लिए एक मूल्य निर्दिष्ट करना बिल्कुल भी नहीं है। यह आपकी खुद की पीठ के लिए रॉड है, क्योंकि आपको पहले एक मूल्य का चयन करना होगा जो कभी भी उपयोग नहीं किया जाएगा, इस मान को फ़िल्टर करें क्योंकि आप शून्य होंगे और याद रखें कि गणना और सारांश में इसका उपयोग न करें और इसे बाहरी डेटा फीड से हटा दें । यह वास्तविक मूल्य का प्रतिनिधित्व करने के लिए एक अशक्त का उपयोग करते हुए कम से कम उतना बुरा है, जो कि आप खुद को बता रहे हैं कि आप से बच रहे हैं, लेकिन आप नहीं हैं।
अधिकांश मुद्दे जो अशक्त होते हैं, एक बार समझ में आने पर (बेहतर सामान्यीकरण, फ़ंक्शन आधारित या बिटमैप इंडेक्स के साथ या एक साधारण WHERE x IS NULL नहीं) से निपटा जा सकता है। क्या आपको लगता है कि कुछ बड़े टेल्को में या अमेज़ॅन पर मासिक प्रदर्शन बैठक में कुछ डीबीए अपने विशाल डेटासेट पर प्रश्नों को तेज करने के लिए इस महान योजना की रूपरेखा तैयार कर रहे हैं "मनमाने ढंग से मान के साथ अशक्त की जगह, जैसे कुछ -5000, या जो भी हो - मैं मूल्य पर खुला हूँ ... "। या क्या आपको लगता है कि वे अवांछित डेटा और फ़िल्टर ऑप्टिमाइज़ेशन को फ़िल्टर करने के लिए बेहतर एप्लीकेशन डिज़ाइन के बीच अपना समय बिताते हैं जो उन्हें दिए गए वास्तविक डेटा के आधार पर होता है ? ठीक है, ठीक है, शायद एक मासिक बैठक थोड़ी आशावादी है, लेकिन जब भी वे होते हैं मैं आपके आश्वासन दे सकता हूं कि "बेहतर एपीआई के लिए -5000 (या जो भी हो) के साथ नल को बदलना एक एजेंडा आइटम नहीं है।"
मेरे लिए यह कहना ठीक है कि मैं लापता डेटा को स्वीकार नहीं करूंगा (आपके पास एक आयु या एक मूल्य या एक क्षेत्र कोड या जो कुछ भी होना चाहिए) और कभी-कभी इस कॉलम के लिए कहने के लिए भी ठीक है, एक डिफ़ॉल्ट मान है जो दर्ज किया जाएगा यदि तुम कुछ और मत रखो। एक शून्य का अर्थ करने के लिए अलग मूल्य निर्धारित करना ठीक नहीं है। उदाहरण के रूप में मध्य-नाम फ़ील्ड के बारे में सोचें। कभी-कभी ये मौजूद नहीं होंगे क्योंकि माता-पिता सभी बक्से में भरने के लिए बहुत आलसी हैं। क्या हम अपनी खोजों में सुधार के लिए अपने डेटा में "कोई नहीं" या "लापता" या "अज्ञात" जोड़ते हैं? नहीं, क्योंकि ऐसे अजीब लोग हो सकते हैं जो अपना नाम इन मूल्यों में बदलते हैं और इसलिए जब हम डेटा प्रिंट करते हैं तो हमें पता नहीं होता है कि हमें इसे शामिल करना चाहिए या नहीं। यह एक सरल, लेकिन दूरगामी उदाहरण है। हम NULL के बारे में जानते हैं और इससे निपटने के लिए कार्यों में निर्मित पूर्वानुमान है। आप इसे कोई बेहतर कोड नहीं दे सकते।
यदि कोई जवाब (या NULL) आपके इनपुट अनुरोध का एक वैध जवाब नहीं है, तो इसे एप्लिकेशन या डेटाबेस में अनुमति न दें, यदि यह एक अच्छी प्रतिक्रिया है, तो आपको इसे अपने आवेदन और डेटाबेस दोनों में अनुमति देनी चाहिए और इससे निपटना चाहिए यह एक वैध प्रतिक्रिया के रूप में है। यदि यह मान्य प्रतिक्रियाओं के सेट का हिस्सा है, तो आपके डेटाबेस को इसे संग्रहीत करने के लिए डिज़ाइन किया जाना चाहिए। आखिरकार, आप यह नहीं कहते कि अरे, संख्या क्षेत्र बहुत उबाऊ हैं जो संख्याओं को ब्लॉब्स में संग्रहीत करते हैं और प्रत्येक नंबर का प्रतिनिधित्व करने के लिए जंगली जानवरों के चित्रों का उपयोग करते हैं, क्योंकि यह पागल (शांत लेकिन पागल) है। हम यह भी तय नहीं करते हैं कि हम अक्षर बी को पसंद नहीं करते हैं, और कुछ क्रूर तिल स्ट्रीट दुःस्वप्न को हमारे डेटा में # के साथ प्रतिस्थापित करते हैं। यदि बी कोई प्रतिक्रिया नहीं है, तो हम चाहते हैं कि हम उपयोगकर्ता को कहें "अरे, आप यहां बी नहीं डाल सकते हैं"। तो क्यों अशक्त अलग तरह से व्यवहार करते हैं?
तो आप उन नल से बचें जो आप आवेदन स्तर पर नहीं चाहते हैं और उनके साथ आप डेटाबेस में व्यवहार करते हैं जहां आप उन्हें स्वीकार करते हैं अन्यथा जिराफ़ + जिराफ़ = हिप्पो के रूप में अपने व्यर्थ डेटा की कमी आपको परेशानी में डाल देगी।