अगर किसी व्यक्ति का नाम नल है तो वह डेटाबेस को कैसे तोड़ देगा?


55

मैं बीबीसी पर इस लेख को पढ़ रहा था । इसमें जेनिफर नल नाम के एक व्यक्ति की कहानी बताई गई है और वह ऑनलाइन डेटाबेस का उपयोग करते समय दिन-प्रतिदिन की समस्याओं का सामना कर रहा है जैसे कि प्लेन टिकट, नेटवर्थ बुकिंग आदि।

मैं डेटाबेस में अच्छी तरह से वाकिफ नहीं हूं और मैं बहुत बार इसका इस्तेमाल नहीं करता। जब मैंने सीखने के लिए एक वेबसाइट बनाई, तो सर्वर साइड फॉर्म सत्यापन ने नियमित अभिव्यक्ति का उपयोग किया। मुझे जो याद है, वह "नल" नाम को खुशी से स्वीकार करेगा। मैंने हालांकि इसकी कोशिश नहीं की है।

क्या कोई तकनीकी को समझा सकता है जब यह स्थिति होगी? क्या फॉर्म सत्यापन सिर्फ एक string == NULLया कुछ और कर रहा है? यहां तक ​​कि मुझे नहीं लगता NULL is same as "NULL"


32
लेख स्पष्ट रूप से एक पत्रकार द्वारा लिखा गया था। नल कई भ्रमों का कारण हैं, आप एक पत्रकार से कम भ्रमित होने की उम्मीद नहीं करेंगे।
ypercube y

2
हर कोई: संबंधित प्रश्नों या लेखों के लिंक के साथ टिप्पणियाँ नीचे एक सामुदायिक विकी उत्तर में स्थानांतरित कर दी गई हैं। कृपया इस पृष्ठ पर आगे लिंक जोड़ने के बजाय उस उत्तर को संपादित करें (या एक संपादन का सुझाव दें)।
पॉल व्हाइट

जवाबों:


42

मैंने डेटाबेस इंटरफेस (जैसे फ्रेमवर्क लाइब्रेरी) को देखा है जो अशक्त स्तंभों के लिए एक स्ट्रिंग के रूप में 'null' लौटाता है। मेरा मानना ​​है कि एक ध्वज था जो डिबगिंग के लिए इसे चालू या बंद कर देगा। यह ध्वज डेवलपर्स को यह आसानी से निर्धारित करने की अनुमति देता है कि क्या खाली क्षेत्र शून्य मान या रिक्त मान का परिणाम था। यह एक खराब सेटिंग है, विशेष रूप से उत्पादन में, और लेख में बताए गए मुद्दों की व्याख्या करेगा।

'Null' को एक शून्य मान में परिवर्तित करने की रिवर्स प्रोसेसिंग को एक नाम फ़ील्ड के लिए एप्लिकेशन त्रुटि उत्पन्न करनी चाहिए। मैं उम्मीद करूंगा कि यह जल्दी से हल हो जाएगा।


वास्तव में - अनकैप्ड भाषाओं के लिए रूपरेखा में यह काफी सामान्य है जहां सभी डेटा को एक स्ट्रिंग में बदल दिया जाता है। मुझे इस पर काम करते हुए कुछ साल हो गए हैं, लेकिन मेरा मानना ​​है कि कोल्डफ्यूजन के शुरुआती संस्करणों में यह समस्या थी, उदाहरण के लिए।
जूल्स

25

एक अच्छा मौका है कि आपकी उलझन का एक अच्छा हिस्सा पत्रकार से उपजा है। लेख केवल डेटाबेस ही नहीं, बल्कि पूरे एप्लिकेशन सिस्टम का उपयोग करते हुए समस्याओं के बारे में बात करता है। पूरी तरह से उचित है क्योंकि यह बड़े पैमाने पर खपत के उद्देश्य से लेखन का एक टुकड़ा है, लेकिन तकनीकी विवरण लेखक द्वारा गलत या गलत समझा गया है।

संभवत: इनमें से कई समस्याएँ DB की API के बजाय, अनुप्रयोग परत पर होती हैं। जादू के मूल्य एक विरोधी प्रतिमान हैं, जो उद्योग से बाहर करने के लिए हास्यास्पद रूप से कठिन हैं। बहुत आसानी से कुछ प्रोग्रामर "कोई टाइप किया हुआ अशक्त 'की तर्ज पर एक शर्त लिख सकते थे; उनका मतलब यह होना चाहिए कि इसका कोई मूल्य नहीं है, क्योंकि यह अशक्त का अर्थ है!" एसक्यूएल इंजेक्शन को रोकने का एक गुमराह करने वाला प्रयास नल के उल्लेखित दुर्व्यवहार के लिए भी जिम्मेदार हो सकता है, या हवाई अंतिम नाम जिसमें एक एकल उद्धरण है, जो मानक एसक्यूएल स्ट्रिंग सीमांकक भी है।

ऐसा एप्लिकेशन जो गलत तरीके से इन मूल्यों को NULL या एक रिक्त स्ट्रिंग में बदल देता है, यदि व्यावसायिक तर्क या DB बाधाओं से कुछ अलग होने की उम्मीद है, तो वे आसानी से त्रुटियाँ पैदा कर सकते हैं। यह स्वाभाविक रूप से लेख में वर्णित निराशाजनक उपयोगकर्ता अनुभव के परिणामस्वरूप होता है।


5
मुझे नहीं पता था कि ओ'ब्रायन ह्वेनियन था।
ग्लोगल

19

लेख में स्वयं एक स्टैक ओवरफ्लो प्रश्न का लिंक शामिल है जो समस्या को प्रदर्शित करता है; यह एक फ्लेक्स एप्लिकेशन में था जहां कोड:

currentChild.appendChild("Fred");

एक तत्व को Fredएक्सएमएल दस्तावेज़ में कोड के साथ एक शब्द जोड़ना होगा :

currentChild.appendChild("null");

एक खाली तत्व को जोड़ना होगा, न कि "null" पाठ वाले तत्व को।

XML, प्रति se, पाठ मान "NULL" के साथ कोई समस्या नहीं है, इसलिए इस तरह के पाठ को शामिल करने से कोई समस्या नहीं होगी। वास्तव में, NULLXML में कोई विशेष अर्थ नहीं है।


13

एक बात मुझे नहीं लगती कि मैंने उल्लेख किया है: हम सिर्फ एसक्यूएल के बारे में बात नहीं कर रहे हैं।

नाम डेटाबेस में शुरू / समाप्त हो सकता है ... लेकिन वहां पहुंचने के लिए सामान्य रूप से MULTIPLE चैनल शामिल हैं। डेटाबेस, Sql, php, html, जावास्क्रिप्ट ... जावा, C #, VB, पर्ल, Phython, Ruby, bash, बैच, आदि, आदि ...

पाइपलाइन के इन चरणों में से प्रत्येक में एक प्रारूप से दूसरे में डेटा परिवर्तित करना शामिल हो सकता है। Sql टेबल से, json से, xml से, CSV, आदि से ...

इस जटिल श्रृंखला के किसी भी बिंदु पर, यह केवल खराब प्रोग्रामिंग या फजी प्रोग्रामिंग भाषा ( उदाहरण के लिए जावास्क्रिप्ट नल हैंडलिंग ) का एक ही स्थान लेगा ...

इसलिए डेटाबेस में होने वाली समस्या के लिए अपने आप को सीमित न करें ... क्योंकि यह "स्टैक" में कहीं भी हो सकता है।


8

विभिन्न लिंक के लिए सामुदायिक विकी का जवाब मूल रूप से इस लोकप्रिय प्रश्न पर टिप्पणी के रूप में छोड़ दिया गया है


4

रिलेशनल डेटाबेस में गुम या अपूरणीय मानों को समायोजित करना होता है। उदाहरण के लिए, ग्राहकों की सूची में एक मोबाइल फोन नंबर या एक लिंग शामिल हो सकता है। क्या होगा यदि कोई निगम ग्राहक बनना चाहता है - उसके पास क्या लिंग होना चाहिए?

एक विशेष संकेतक का उपयोग मूल्य दिखाने के लिए गायब है। यह विशेष ध्वज NULL है। इसलिए मैला प्रोग्रामिंग लापता मान संकेतक का कारण बन सकता है - NULL - जेनिफर नल के उपनाम के साथ भ्रमित होने के लिए, शायद वास्तविक मूल्य के बजाय लापता डेटा के रूप में उसके उपनाम की व्याख्या करना।

यह थोड़ा सा है जैसे बैंक खाता खोलना लेकिन पैसा जमा नहीं करना। शेष शून्य है। इसका मतलब यह नहीं है कि आपके पास कोई संतुलन नहीं है। इसका मतलब है कि आपके पास एक संतुलन है और इसका मूल्य "0" है। लेकिन मैला प्रोग्रामिंग शून्य को "मौजूद नहीं है" के रूप में गलत व्याख्या कर सकती है और निर्धारित करती है कि आपके पास बिल्कुल भी खाता नहीं है।


2

वहाँ बहुत खराब लिखा सॉफ्टवेयर है, और यहां तक ​​कि चौखटे, कि नल नाम के किसी व्यक्ति के साथ अजीब व्यवहार करेंगे।

लेकिन मानव तत्व को नहीं भूलना चाहिए: शायद मनुष्य स्क्रीन और प्रिंटआउट पर नाम देख रहा है और सोच रहा है कि यह एक गलती है और व्यक्ति को हटाना एक और संभावित कारण है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.