मेरे पास एक एप्लिकेशन है (डेटा पोस्टग्रेक्यूएल में संग्रहीत है), जहां टेबल के अधिकांश फ़ील्ड हमेशा शून्य नहीं होते हैं, लेकिन इन तालिकाओं के लिए स्कीमा इसे लागू नहीं करता है। उदाहरण के लिए इस नकली तालिका को देखें:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
इसके अलावा name, num, timeस्पष्ट रूप से कहा गया है के रूप में नहीं कर रहे हैं NOT NULL, वास्तव में वे कर रहे हैं, क्योंकि प्रवर्तन आवेदन पक्ष पर होता है।
मेरी भावना यह है कि इसे बदल दिया जाना चाहिए, लेकिन काउंटरपॉइंट यह है कि आवेदन स्तर यह सुनिश्चित करता है कि अशक्त मूल्य यहां प्रकट नहीं हो सकते हैं और कोई अन्य मैन्युअल रूप से तालिका को संशोधित नहीं करता है।
मेरा सवाल है : क्या लाभ (प्रदर्शन, भंडारण, स्थिरता, कुछ और) और कमियां हैं (यह मानते हुए कि मैं पहले से ही सत्यापित करता हूं कि फिलहाल कोई शून्य मौजूद नहीं है, और व्यापार तर्क से कोई शून्य नहीं होना चाहिए) सेटिंग के साथ स्पष्ट NOT NULLबाधा?
हमारे पास एक अच्छी कोड समीक्षा प्रक्रिया और एक यथोचित दस्तावेज है, इसलिए संभावना है कि कुछ नए व्यक्ति कुछ ऐसा करेंगे जो इस बाधा को तोड़ता है वास्तव में परिवर्तन को सही ठहराने के लिए पर्याप्त नहीं है।
यह मेरा निर्णय नहीं है, इसलिए यही कारण है कि मैं अन्य औचित्य की तलाश कर रहा हूं। मेरी राय में, अगर कुछ अशक्त नहीं हो सकता है और एक डेटाबेस आपको यह निर्दिष्ट करने की अनुमति देता है कि कुछ अशक्त नहीं है - तो बस इसे करें। खासकर अगर बदलाव सुपर सरल है।
NOT NULLभंडारण के आकार पर बाधाओं का कोई सीधा प्रभाव नहीं पड़ता है। बेशक, सभी स्तंभ परिभाषित होने के साथ NOT NULL, एक शून्य बिटमैप शुरू करने के लिए नहीं हो सकता है। दूसरी ओर: भंडारण आकार आम तौर पर बहुत छोटा होता है यदि आप वास्तविक मान के बिना कॉलम के लिए "खाली" या डमी मूल्यों के बजाय NULL का उपयोग करते हैं, क्योंकि नल बिटमैप तुलनात्मक रूप से बहुत छोटा है (दुर्लभ किनारे के मामलों को छोड़कर)।