मुझे पता है कि यह विषय थोड़ा विवादास्पद है और बहुत सारे लेख / राय इंटरनेट पर तैर रहे हैं। Unfortunatelly, उनमें से ज्यादातर मानते हैं कि व्यक्ति को पता नहीं है कि NULL और खाली स्ट्रिंग में क्या अंतर है। इसलिए वे जॉइन / एग्रीगेट के साथ आश्चर्यजनक परिणामों के बारे में बताते हैं और आम तौर पर थोड़ा और अधिक उन्नत एसक्यूएल पाठ करते हैं। ऐसा करने से, वे पूरी बात याद करते हैं और इसलिए मेरे लिए बेकार हैं। इसलिए उम्मीद है कि यह सवाल और सभी जवाब थोड़ा आगे बढ़ेंगे।
मान लें कि मेरे पास व्यक्तिगत जानकारी (नाम, जन्म आदि) के साथ एक तालिका है, जिसमें से एक स्तंभ, varchar प्रकार के साथ एक ईमेल पता है। हम मानते हैं कि किसी कारण से कुछ लोग ईमेल पता प्रदान नहीं करना चाहते हैं। ऐसे डेटा को (ईमेल के बिना) तालिका में सम्मिलित करते समय, दो उपलब्ध विकल्प होते हैं: सेल को NULL पर सेट करें या इसे रिक्त स्ट्रिंग ('') पर सेट करें। मान लेते हैं कि मुझे एक समाधान को दूसरे पर चुनने के सभी तकनीकी निहितार्थों के बारे में पता है और मैं किसी भी परिदृश्य के लिए सही SQL क्वेरी बना सकता हूं। समस्या तब भी है जब दोनों मूल्य तकनीकी स्तर पर भिन्न हैं, वे तार्किक स्तर पर बिल्कुल समान हैं। NULL और '' '' को देखने के बाद मैं एक निष्कर्ष पर पहुंचा: मुझे उस आदमी का ईमेल पता नहीं है। कोई फर्क नहीं पड़ता कि मैंने कितनी कोशिश की, मैं NULL या खाली स्ट्रिंग का उपयोग करके एक ई-मेल भेजने में सक्षम नहीं था, इसलिए जाहिरा तौर पर अधिकांश एसएमटीपी सर्वर मेरे तर्क से सहमत थे। इसलिए मैं NULL का उपयोग करता हूं जहां मुझे मूल्य का पता नहीं है और खाली स्ट्रिंग को एक बुरी चीज मानता है।
सहकर्मियों के साथ कुछ गहन चर्चाओं के बाद मैं दो सवालों के साथ आया:
क्या मैं यह मानने में सही हूं कि किसी अज्ञात मान के लिए खाली स्ट्रिंग का उपयोग करने से तथ्यों के बारे में डेटाबेस "झूठ" हो रहा है? अधिक सटीक होना: एसक्यूएल के विचार का उपयोग करना कि मूल्य क्या है और क्या नहीं है, मैं निष्कर्ष पर आ सकता हूं: हमारे पास ई-मेल पता है, बस यह पता लगाकर कि यह शून्य नहीं है। लेकिन फिर बाद में, जब मैं ई-मेल भेजने की कोशिश कर रहा हूं तो मैं विरोधाभासी निष्कर्ष पर पहुंचूंगा: नहीं, हमारे पास ई-मेल पता नहीं है, कि @! # $ डेटाबेस झूठ बोल रहा होगा!
क्या कोई तार्किक परिदृश्य है जिसमें एक खाली स्ट्रिंग '' महत्वपूर्ण जानकारी (मूल्य और मूल्य के अलावा) का इतना अच्छा वाहक हो सकता है, जो किसी अन्य तरीके से (अतिरिक्त स्तंभ की तरह) स्टोर करने के लिए परेशानी / अक्षम होगा। मैंने कई पोस्टों में दावा किया है कि कभी-कभी वास्तविक मान और NULLs के साथ खाली स्ट्रिंग का उपयोग करना अच्छा होता है, लेकिन अभी तक ऐसा परिदृश्य नहीं देखा गया है जो तार्किक (SQL / DB डिजाइन के संदर्भ में) होगा।
पुनश्च कुछ लोगों को जवाब देने के लिए परीक्षा होगी, कि यह सिर्फ व्यक्तिगत स्वाद की बात है। मैं सहमत नहीं हूँ। मेरे लिए यह महत्वपूर्ण परिणामों के साथ एक डिजाइन निर्णय है। इसलिए मैं उन उत्तरों को देखना चाहता हूं जहां इस बारे में कुछ तार्किक और / या तकनीकी कारणों से समर्थन प्राप्त होता है।
''
ओरेकल में भी, के रूप में ही नहीं है NULL
। उदाहरण के लिए, किसी CHAR(1)
कॉलम को मान देने ''
से परिणाम ' '
(यानी एक स्थान) होगा, नहीं NULL
। इसके अलावा, अगर जेसेक ओरेकल का उपयोग कर रहा था, तो यह प्रश्न संभवतः सामने नहीं आएगा :-)
'' IS NULL
मूल्यांकन के बाद से यह अभी तक एक और डब्ल्यूटीएफ है true
।