আমার একটি অ্যাপ্লিকেশন রয়েছে (ডেটা পোস্টগ্রিএসকিউএল এ সংরক্ষণ করা হয়), যেখানে সারণীর ক্ষেত্রগুলির বেশিরভাগ ক্ষেত্র সর্বদা নাল নয়, তবে এই টেবিলগুলির জন্য স্কিমা এটি প্রয়োগ করে না। উদাহরণস্বরূপ এই জাল টেবিলটি দেখুন:
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 ব্যবহার করেন তবে স্টোরেজ আকারটি অনেক কম হয় কারণ নাল বিটম্যাপ তুলনামূলকভাবে অনেক ছোট (বিরল প্রান্তের ক্ষেত্রেগুলি বাদে)।