মৌলিকভাবে কোনও কথা বলা একাধিক কলাম প্রাথমিক কীতে কোনও NUL এর সাথে ভুল নয়। তবে ডিজাইনার সম্ভবত এটি করতে চাননি এমন একটি ধারণাগুলি রয়েছে যার কারণে আপনি যখন এটি চেষ্টা করেন তখন অনেকগুলি সিস্টেম ত্রুটি ফেলে।
ক্ষেত্রগুলির একটি সিরিজ হিসাবে সঞ্চিত মডিউল / প্যাকেজ সংস্করণগুলির ক্ষেত্রে বিবেচনা করুন:
CREATE TABLE module
(name varchar(20) PRIMARY KEY,
description text DEFAULT '' NOT NULL);
CREATE TABLE version
(module varchar(20) REFERENCES module,
major integer NOT NULL,
minor integer DEFAULT 0 NOT NULL,
patch integer DEFAULT 0 NOT NULL,
release integer DEFAULT 1 NOT NULL,
ext varchar(20),
notes text DEFAULT '' NOT NULL,
PRIMARY KEY (module, major, minor, patch, release, ext));
প্রাথমিক কীটির প্রথম 5 টি উপাদান নিয়মিতভাবে প্রকাশের সংস্করণের অংশ হিসাবে সংজ্ঞায়িত করা হয় তবে কিছু প্যাকেজগুলির নিজস্ব কাস্টমাইজড এক্সটেনশন থাকে যা সাধারণত কোনও পূর্ণসংখ্যার হয় না (যেমন "আরসি-ফু" বা "ভ্যানিলা" বা "বিটা" বা অন্য যে কোনও জন্য যার চারটি ক্ষেত্র অপর্যাপ্ত তারা স্বপ্ন দেখতে পারে)। যদি কোনও প্যাকেজের কোনও এক্সটেনশন না থাকে তবে উপরের মডেলটিতে এটি শূন্য, এবং জিনিসগুলি সেভাবে রেখে কোনও ক্ষতি করা হবে না।
কিন্তু কি হল একটি শূন্য? এটি তথ্যের অভাব , একটি অজানা প্রতিনিধিত্ব করার কথা । এটি বলেছিল, সম্ভবত এটি আরও অর্থবোধ করে:
CREATE TABLE version
(module varchar(20) REFERENCES module,
major integer NOT NULL,
minor integer DEFAULT 0 NOT NULL,
patch integer DEFAULT 0 NOT NULL,
release integer DEFAULT 1 NOT NULL,
ext varchar(20) DEFAULT '' NOT NULL,
notes text DEFAULT '' NOT NULL,
PRIMARY KEY (module, major, minor, patch, release, ext));
এই সংস্করণে টিউলের "এক্সট্রাক্ট" অংশটি শূন্য নয় তবে একটি খালি স্ট্রিংয়ের ডিফল্ট - যা শব্দার্থগতভাবে (এবং ব্যবহারিকভাবে) একটি ন্যূনাল থেকে পৃথক different একটি NUL অজানা, যেখানে একটি খালি স্ট্রিং হ'ল "উপস্থিত কিছু নেই" এর ইচ্ছাকৃত রেকর্ড। অন্য কথায়, "খালি" এবং "নাল" আলাদা জিনিস। "এখানে আমার কোনও মূল্য নেই" এবং "এখানে মান কী তা আমি জানি না" এর মধ্যে পার্থক্য।
আপনি যখন কোনও প্যাকেজটি নিবন্ধভুক্ত করেন যার সংস্করণ এক্সটেনশনের অভাব রয়েছে আপনি জানেন এটির কোনও এক্সটেনশনের অভাব রয়েছে তাই খালি স্ট্রিংটি আসলে সঠিক মান। একটি NUL কেবল তখনই সঠিক হতে পারে যদি আপনি জানতেন না যে এটির কোনও এক্সটেনশন রয়েছে কি না, বা আপনি জানতেন যে এটি রয়েছে তবে এটি কী ছিল তা জানেন না। এই পরিস্থিতিতে সিস্টেমে স্ট্রিংয়ের মানগুলি আদর্শ হিসাবে কাজ করা সহজ, কারণ 0 বা 1 সন্নিবেশ করা ব্যতীত "ফাঁকা পূর্ণসংখ্যার" উপস্থাপন করার কোনও উপায় নেই, যা পরবর্তীকালে যে কোনও তুলনা করে গড়িয়ে যাবে (যা আছে) এর নিজস্ব প্রভাব) *।
ঘটনাচক্রে, দুটি উপায়ই পোস্টগ্র্রেসে বৈধ (আমরা যেহেতু "এন্টারপ্রাইজ" আরডিএমবিএস নিয়ে আলোচনা করছি), তবে আপনি যখন মিশ্রণে একটি এনএলএল নিক্ষেপ করেন তখন তুলনার ফলাফলগুলি বেশ কিছুটা পৃথক হতে পারে - কারণ NULL == "জানেন না" তাই সমস্ত নুলের সাথে জড়িত একটি তুলনার ফলাফল নুল হ'ল যেহেতু আপনি এমন কিছু জানেন না যা অজানা। বিপদ! সে সম্পর্কে সাবধানতার সাথে চিন্তা করুন: এর অর্থ এই যে NUL তুলনার ফলাফলগুলি একের সাথে তুলনা করে প্রচার করে। বাছাই, তুলনা ইত্যাদির সময় এটি সূক্ষ্ম বাগের উত্স হতে পারে
পোস্টগ্রিস ধরে নেয় আপনি একজন প্রাপ্তবয়স্ক এবং নিজেরাই এই সিদ্ধান্ত নিতে পারেন। ওরাকল এবং ডিবি 2 ধরে নিলেন আপনি বুঝতে পারছেন না যে আপনি নির্বোধ কিছু করছেন এবং একটি ত্রুটি ছুঁড়েছেন। এটি সাধারণত সঠিক জিনিস, তবে সর্বদা না - আপনি কিছু ক্ষেত্রে সত্যই জানেন না এবং একটি NUL থাকতে পারেন এবং অতএব অজানা উপাদানটির সাথে একটি সারি রেখে যা যার অর্থপূর্ণ তুলনা অসম্ভব এটি সঠিক আচরণ।
যে কোনও ক্ষেত্রে আপনি সম্পূর্ণ স্কিমা জুড়ে অনুমতি দিয়েছিলেন এমন NUL ক্ষেত্রের সংখ্যা অপসারণ করার জন্য আপনার প্রচেষ্টা করা উচিত এবং যখন এটি কোনও প্রাথমিক কীটির অংশ হিসাবে ক্ষেত্রগুলির ক্ষেত্রে আসে তখন দ্বিগুণ। বেশিরভাগ ক্ষেত্রে NULL কলামগুলির উপস্থিতি আন-নর্মালাইজড (ইচ্ছাকৃতভাবে ডি-নরমালাইজডের বিপরীতে) স্কিমা ডিজাইনের ইঙ্গিত এবং গ্রহণযোগ্য হওয়ার আগে খুব কঠোরভাবে চিন্তা করা উচিত।
[* দ্রষ্টব্য: একটি পছন্দসই প্রকার তৈরি করা সম্ভব যা পূর্ণসংখ্যার মিল এবং "নীচে" প্রকার যা শব্দার্থগতভাবে "অজানা" এর বিপরীতে "খালি" অর্থ দাঁড়ায়। দুর্ভাগ্যক্রমে এটি তুলনামূলক ক্রিয়াকলাপে কিছুটা জটিলতার পরিচয় দেয় এবং সাধারণত সত্যই টাইপ করা সঠিকভাবে অনুশীলন করার প্রচেষ্টাটির পক্ষে মূল্যহীন না কারণ আপনাকে NULL
প্রথমে একাধিক মানের মান দেওয়া উচিত নয় । এটি বলেছিল, বিস্ময়কর হবে যদি আরডিবিএমএসগুলি "অজানা মান" দিয়ে "মূল্য নেই" এর শব্দার্থকভাবে দুর্ঘটনাক্রমে বিভ্রান্ত করার অভ্যাসটি রোধ করার BOTTOM
পাশাপাশি একটি ডিফল্ট ধরণের অন্তর্ভুক্ত করে NULL
। ]