এসকিউএল: খালি স্ট্রিং বনাম ন্যূনাল মান


72

আমি জানি এই বিষয়টি কিছুটা বিতর্কিত এবং ইন্টারনেটে প্রচুর বিভিন্ন নিবন্ধ / মতামত রয়েছে। দুর্ভাগ্যক্রমে, তাদের বেশিরভাগই ধরে নেন যে ব্যক্তিটি জানেন না যে এনইউএল এবং খালি স্ট্রিংয়ের মধ্যে পার্থক্য কী। সুতরাং তারা যোগদান / সমষ্টিগুলির সাথে অবাক করা ফলাফল সম্পর্কে গল্পগুলি বলে এবং সাধারণত কিছুটা আরও উন্নত এসকিউএল পাঠগুলি করে। এটি করে, তারা একেবারে পুরো বিষয়টি মিস করে এবং তাই আমার পক্ষে অকেজো। সুতরাং আশা করি এই প্রশ্ন এবং সমস্ত উত্তর বিষয়টিকে সামান্য এগিয়ে নিয়ে যাবে।

ধরা যাক আমার কাছে ব্যক্তিগত তথ্য (নাম, জন্ম, ইত্যাদি) সহ একটি টেবিল রয়েছে যেখানে কলামগুলির মধ্যে একটিতে বার্তা টাইপ সহ একটি ইমেল ঠিকানা। আমরা ধরে নিই যে কোনও কারণে কিছু লোক ইমেল ঠিকানা সরবরাহ করতে চায় না। টেবিলের মধ্যে এই জাতীয় ডেটা (ইমেল ছাড়াই) সন্নিবেশ করার সময়, দুটি উপলভ্য পছন্দ রয়েছে: সেলকে ন্যূনএলএল সেট করুন বা খালি স্ট্রিংয়ে সেট করুন ('')। আসুন ধরে নেওয়া যাক যে আমি একের বেশি সমাধানের জন্য সমস্ত প্রযুক্তিগত প্রভাব সম্পর্কে অবগত এবং আমি উভয় দৃশ্যের জন্য সঠিক এসকিউএল অনুসন্ধান তৈরি করতে পারি। সমস্যাটি তখনও যখন প্রযুক্তিগত স্তরে উভয় মান পৃথক হয়, লজিক্যাল স্তরে এগুলি ঠিক একই। NULL এবং '' দেখার পরে আমি একটি সিদ্ধান্তে পৌঁছেছি: আমি লোকটির ইমেল ঠিকানা জানি না। আমি যতই চেষ্টা করি না কেন, আমি নূলে বা খালি স্ট্রিং ব্যবহার করে কোনও ইমেল প্রেরণ করতে সক্ষম হইনি, সুতরাং বাহ্যিকভাবে বেশিরভাগ এসএমটিপি সার্ভারগুলি আমার যুক্তির সাথে একমত হয়। সুতরাং আমি নুল ব্যবহার করি যেখানে আমি মান জানি না এবং খালি স্ট্রিংটিকে একটি খারাপ জিনিস মনে করি।

সহকর্মীদের সাথে কিছু তীব্র আলোচনার পরে আমি দুটি প্রশ্ন নিয়ে এসেছি:

  1. আমি কি ঠিক ধরে নিচ্ছি যে অজানা মানের জন্য খালি স্ট্রিং ব্যবহারের ফলে একটি ডাটাবেস তথ্যের বিষয়ে "মিথ্যা" সৃষ্টি করছে? আরও সুনির্দিষ্টভাবে বলা: কোনটি মূল্য এবং কী নয় সে সম্পর্কে এসকিউএল এর ধারণাটি ব্যবহার করে আমি উপসংহারে আসতে পারি: আমাদের ই-মেইল ঠিকানা রয়েছে, কেবল এটি সন্ধান করে এটি বাতিল নয় is তবে তারপরে, ইমেল প্রেরণের চেষ্টা করার সময় আমি পরস্পরবিরোধী সিদ্ধান্তে পৌঁছে যাব: না, আমাদের ই-মেইল ঠিকানা নেই, যে @! # $ ডাটাবেসটি অবশ্যই মিথ্যা বলেছে!

  2. এমন কোনও যৌক্তিক পরিস্থিতি রয়েছে যেখানে কোনও খালি স্ট্রিং '' গুরুত্বপূর্ণ তথ্যের (যেমন মান এবং কোনও মূল্য ছাড়াও) এত ভাল বাহক হতে পারে, যা অন্য কোনও উপায়ে (অতিরিক্ত কলামের মতো) সংরক্ষণ করা ঝামেলা / অদক্ষ। আমি অনেক পোস্ট দেখে দাবি করেছি যে কখনও কখনও খালি স্ট্রিং ব্যবহার করে আসল মান এবং NUL গুলি ব্যবহার করা ভাল তবে এখনও অবধি এমন দৃশ্য দেখেনি যা যৌক্তিক হবে (এসকিউএল / ডিবি ডিজাইনের ক্ষেত্রে)।

পিএস কিছু লোক উত্তর দেওয়ার জন্য প্রলুব্ধ হবে, এটি কেবল ব্যক্তিগত স্বাদের বিষয়। আমি রাজি নই। আমার কাছে এটি গুরুত্বপূর্ণ পরিণতি সহ একটি ডিজাইনের সিদ্ধান্ত। সুতরাং আমি উত্তরগুলি দেখতে চাই যেখানে কিছু যুক্তিসঙ্গত এবং / বা প্রযুক্তিগত কারণে এটি সম্পর্কে মতামত সমর্থিত হয়।


11
আপনি সচেতন যে Oracle এ, খালি স্ট্রিং হয় হয় শূন্য?
ব্যবহারকারী 281377

8
@ এ্যাম্মিউকিউ: ওরাকলের শূন্য দৈর্ঘ্যের স্ট্রিংগুলির চিকিত্সা মানহীন। এছাড়াও, ''এমনকি ওরাকল-এও একইরকম নয় NULL। উদাহরণস্বরূপ, একটি CHAR(1)কলামকে মান নির্ধারণের ''ফলে ' '(অর্থাত্ একটি স্থান) ফলাফল হবে , না NULL। তদ্ব্যতীত, জ্যাসেক যদি ওরাকল ব্যবহার করে তবে এই প্রশ্নটি সম্ভবত উঠে আসে না :-)
ডিন হার্ডিং

2
ডিন: আপনি চর (1) উদাহরণ সম্পর্কে ঠিক বলেছেন, তবে এটি এখনও অন্য একটি ডাব্লুটিএফ, যেহেতু পিএল / এসকিউএল এ '' IS NULLমূল্যায়ন করে true
ব্যবহারকারী 281377

"আমি কি ঠিক ধরে নিচ্ছি যে অজানা মানের জন্য খালি স্ট্রিং ব্যবহারের ফলে তথ্য-উপাত্তকে" মিথ্যা "বলা হচ্ছে?" যদি আপনার ব্যবসায়িক ব্যবহারকারীরা অজানা বনাম খালি সম্পর্কে চিন্তা না করে তবে মিথ্যাটি কী কী গুরুত্ব দেয়?
অ্যান্ডি

যদি আপনার অবশ্যই স্ট্রিং ব্যবহারের পথে যেতে হয় ... দয়া করে দয়া করে নিশ্চিত হয়ে নিন যে এটি খালি রয়েছে। সমস্ত বিকাশকারীদের স্বার্থে, কোনও স্থানের কোনও স্ট্রিং যাতে আপনার অজানা মানটিকে উপস্থাপন করে না। আমি আপনাকে ভিক্ষা।
Airn5475

উত্তর:


83

আমি বলব এটি NULL"কোনও ইমেল ঠিকানা নয়" এর সঠিক পছন্দ। আছে অনেক "অবৈধ" ইমেল ঠিকানা, এবং "" (খালি স্ট্রিং) শুধু একটি। উদাহরণস্বরূপ "foo" একটি বৈধ ইমেল ঠিকানা নয়, "a @ b @ c" বৈধ নয় এবং এই জাতীয়। সুতরাং "" কোনও বৈধ ইমেল ঠিকানা নয় বলে এটিকে "কোনও ইমেল ঠিকানা নয়" মান হিসাবে ব্যবহার করার কোনও কারণ নেই।

আমি মনে করি আপনি ঠিক বলেছেন যে "" "এই কলামটির কোনও মূল্য নেই" বলার সঠিক উপায় নয়। "" হয় একটি মান।

যেখানে "" একটি বৈধ মান হতে পারে তার উদাহরণ, NULLকোনও ব্যক্তির মধ্য নাম হতে পারে। প্রত্যেকেরই একটি মাঝের নাম নেই, তাই আপনাকে "নো মাঝের নাম" ("" - খালি স্ট্রিং) এবং "এই ব্যক্তির মধ্য নাম আছে কিনা" আমি জানি না "( NULL)। সম্ভবত অন্যান্য অনেকগুলি উদাহরণ রয়েছে যেখানে খালি স্ট্রিং এখনও একটি কলামের জন্য একটি বৈধ মান।


5
সম্পূর্ণ একমত. NULL একটি কারণ আছে। ইমেল যেখানে রয়েছে নিজের থেকে কাউন্ট নির্বাচন করুন (*) এটি করার উপায়টি নয়, স্ট্রিং তুলনা যা ধীর হবে (এমনকি খালি স্ট্রিংয়ের জন্যও আমি মনে করি তবে আমি এটি সম্পর্কে নিশ্চিত নই :)।
লুডোএমসি

5
আমি মনে করি NULLযে কোনও ইমেল ঠিকানা নেই এর অর্থ এই নয়, আমি মনে করি এটির অর্থ এই যে ইমেল ঠিকানাটি বর্তমানে জানা নেই, অস্তিত্বের জন্য জানা নেই, বা অন্য কারণে পূরণ করা অসম্ভব। ভাগ্যক্রমে, সম্ভবত এমন কোনও পরিস্থিতি নেই যেখানে কোনও লোকেরা এমন তথ্য সম্পর্কে তথ্য রাখতে চান যাঁরা সত্যই নেই এবং কোনও ইমেল ঠিকানা রাখার পরিকল্পনা করেন না, অন্যথায় একটি পৃথক বুলিয়ান ক্ষেত্র সম্ভবত প্রয়োজন।
আলেক্সি

9
@ অ্যালেক্সা - নুল মানে এর কোনও মূল্য নেই। অন্যরা যেমন খালি স্ট্রিংয়ের একটি মূল্য দেখিয়েছে।
রামহাউন্ড

3
@ রামহাউন্ড, আমি সম্মত হই যে শূন্য স্ট্রিংয়ের একটি মূল্য এবং নুল অস্পষ্টতার অর্থ "কোনও মূল্য নেই"। আমি আমার "কোন মূল্য নেই" এর ব্যাখ্যাটি কেবল ব্যাখ্যা করেছি। আমার মতে, "ব্যক্তি কোনও ইমেল অ্যাকাউন্ট খুলেনি" এর মতো নয়। এটি বরং "সেই ব্যক্তির জন্য কোনও ইমেল ঠিকানা রেকর্ড করা হয়নি"।
অ্যালেক্সি

5
@ রামহাউন্ড নুল মানে এর কোনও মূল্য নেই। মাঝের নামবিহীন ব্যক্তির কোনও মূল্য নেই। সুতরাং, মাঝারি প্রাথমিক কলামেও NULL ব্যবহার করা উচিত ... যা এই উত্তরে উপস্থাপন করা যুক্তির সম্পূর্ণ বিপরীত।
ইজকাটা

41

উপরের মন্তব্যগুলির সাথে একমত হওয়ার সময়, আমি এই যুক্তিটিকে প্রাথমিক প্রেরণা হিসাবে যুক্ত করব:

  1. ডাটাবেসের দিকে তাকানো যে কোনও প্রোগ্রামার স্পষ্ট যে NULL চিহ্নিত ক্ষেত্রটি একটি ptionচ্ছিক ক্ষেত্র। (যেমন রেকর্ডটির জন্য column কলামটির জন্য ডেটার প্রয়োজন হয় না)
  2. আপনি যদি কোনও ক্ষেত্রটি শূন্য না হিসাবে চিহ্নিত করেন তবে যে কোনও প্রোগ্রামারকে স্বজ্ঞাতভাবে ধরে নেওয়া উচিত যে এটি একটি প্রয়োজনীয় ক্ষেত্র।
  3. নালকে মঞ্জুরি দেয় এমন ক্ষেত্রে, প্রোগ্রামারদের ফাঁকা স্ট্রিংয়ের পরিবর্তে নাল দেখতে আশা করা উচিত।

স্ব-ডকুমেন্টিং স্বজ্ঞাত কোডিংয়ের স্বার্থে, খালি স্ট্রিংয়ের পরিবর্তে NULL ব্যবহার করুন।


4
+1 খালি স্ট্রিংগুলির বিরুদ্ধে বিকাশকারীদের প্রতি এটি "সর্বনিম্ন বিস্ময়" argument পরে আসা কোনও বিকাশকারী কখনও আশা করতে পারে না যে খালি স্ট্রিংগুলি "কোনও ইমেল ঠিকানা নয়" উপস্থাপনের জন্য ব্যবহৃত হবে।
থমাস

6

আপনার উদাহরণে যদি এটি ওয়েব ক্ষেত্র থেকে সরাসরি মান হয় - আমি খালি স্ট্রিংটি ব্যবহার করব। ব্যবহারকারী যদি ইমেল সরবরাহ করতে চান না বা এটি মুছতে পারে তা নির্দিষ্ট করতে বিকল্প দিতে পারে - তবে নুল।

আপনি যে পয়েন্টগুলির সাথে বিবেচনা করতে পারেন তার সাথে এখানে লিঙ্ক দেওয়া হয়েছে: https://stackoverflow.com/questions/405909/null-vs-empty-when-dealing-with-user-input/405945#405945

--- সম্পাদিত (টমাস মন্তব্যের জবাবে) ---

ডেটাবেসগুলি এগুলি ব্যবহার করে এমন অ্যাপ্লিকেশন ছাড়া বাস করে না। NULL বা '' এর সংজ্ঞা দেওয়ার কোনও মূল্য নেই, যদি অ্যাপ্লিকেশন এটি সঠিকভাবে ব্যবহার করতে না পারে।

একটি উদাহরণ বিবেচনা করুন যেখানে ব্যবহারকারী দীর্ঘ ফর্ম পূরণ করছে এবং এন্টার টিপুন, যা সার্ভারে স্থির অনুরোধ প্রেরণ করবে। তিনি তার ইমেল প্রবেশের মাঝখানে হতে পারে। সম্ভবত আপনি ইমেল ক্ষেত্রে তার যা আছে তা সঞ্চয় করতে চান, তাই পরে তিনি এটি শেষ করতে পারেন। তিনি যদি কেবল একটি চরিত্রে প্রবেশ করেন? সে যদি একটি চরিত্র প্রবেশ করে তা মুছলে? যখন ইমেল প্রয়োজন হয় না, কখনও কখনও ব্যবহারকারীরা এটি মুছতে চান: কেবল ক্ষেত্র সাফ করার সবচেয়ে সহজ উপায়। এছাড়াও ইমেল যখন প্রয়োজন হয় না ক্ষেত্রে প্রেরণের আগে এটি বৈধ হওয়া মূল্যবান।

আরেকটি উদাহরণ: ব্যবহারকারী স্প্যামটো @ [বিগকম্পানি]। কম হিসাবে ইমেল সরবরাহ করে that সেই ক্ষেত্রে ইমেল প্রেরণের দরকার নেই, তবুও এটি বিদ্যমান এবং বৈধ (এবং এমনকি এটি উপস্থিত থাকতে পারে)। এরকম একটি সম্ভবত সস্তা প্রেরণ, তবে যদি প্রতিদিনের সাবস্ক্রিপশনের জন্য এই জাতীয় ইমেলগুলি সহ 10 কে ব্যবহারকারী থাকে, তবে এই জাতীয় বৈধতা অনেক সময় সাশ্রয় করতে পারে।


7
-1। ডাটাবেস কোনও ওয়েবসাইট চালাচ্ছে কিনা তা অপ্রাসঙ্গিক। ডাটাবেস ডিজাইন করা ওয়েব ডিজাইনের চেয়ে আলাদা বিশ্ব। ডাটাবেসটি ব্যবসায় ডোমেনটিতে লেখার জন্য ব্যবহৃত ইন্টারফেসের চেয়ে স্বাধীনতার বিষয়ে তথ্য ক্যাপচারের জন্য তৈরি করা উচিত। আপনার যুক্তি অনুসারে, যদি কাকতালীয়ভাবে প্রথম প্রয়োগটি কার্যকর হয় তবে আপনার কি নাল ব্যবহার করা উচিত? প্রথম অ্যাপটি যদি ওয়েব অ্যাপ্লিকেশন হয় তবে পরবর্তী অ্যাপ্লিকেশনটি একটি মোবাইল অ্যাপ্লিকেশন হয় তবে কী হবে? সাধারণকরণের নিয়ম ব্যবহার করে তথ্যগুলি ক্যাপচারের জন্য ডেটাবেস ডিজাইন করুন এবং তাতে ওয়েবসাইট লিখতে ওয়েবসাইট ডিজাইন করুন।
টমাস

আমি আনন্দিত যে আপনি এই সাইটে কীভাবে লিখতে এবং মন্তব্য করতে শিখলেন :) আমি এখনও বিশ্বাস করি যে ডিবি এটি ব্যবহার করে এমন অ্যাপ্লিকেশনটিকে সমর্থন করে। আমার সম্পাদিত উত্তর চেক করুন।
কনস্ট্যান্টিন পেটরুখনভ

4
ডেটাবেসগুলি এগুলি ব্যবহার করে এমন অ্যাপ্লিকেশন ছাড়া বাস করে না। আমার অভিজ্ঞতায়, এটি কেবল সত্য এবং স্বল্পদৃষ্টির নয়। প্রায় সর্বদা ডেটাবেস অ্যাপ্লিকেশনটির জন্য ব্যবহার করা হয় যার জন্য এটি নকশা করা হয়েছিল। সাধারণভাবে, ডাটাবেসগুলি যে অ্যাপ্লিকেশনগুলির জন্য নির্মিত হয়েছিল তার চেয়ে বেশি সময় বেঁচে থাকে। ডাটাবেসগুলি ব্যবসায়ের বিষয়ে তথ্য সংগ্রহের জন্য নকশাকৃত করা উচিত এবং ইউআইআইটি অন্য উপায়ে নয় ডাটাবেজে পড়ার জন্য লিখতে হবে। রিলেশনাল ডিজাইন অ্যাপ্লিকেশন ডিজাইনের চেয়ে সম্পূর্ণ ভিন্ন মানসিকতা।
টমাস

2
উদাহরণস্বরূপ যেখানে ডাটাবেসগুলি সম্পূর্ণরূপে মূল অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় না : প্রতিবেদনগুলি, অন্যান্য সিস্টেমের সাথে সংহতকরণ।
থমাস

1
থমাস যেমন নির্দেশ করেছেন যে ডিবিগুলি প্রায়শই একাধিক অ্যাপ্লিকেশন ব্যবহার করতে পারে যা আপনার ডিবি ডেটা পরিষ্কার রাখার ধারণাকে ওজন যোগ করে। আপনি যদি নিজের অ্যাপ্লিকেশনটিতে ন্যূনালগুলি পরিচালনা করতে / না করতে চান তবে আপনি কেবল আপনার ডেটা অ্যাক্সেস লেয়ারে আপনার "যাদু মান" (দুর্দান্ত বিবরণ থমাস) এর জন্য তাদের প্রতিস্থাপন করতে পারেন। এইভাবে ডিবি অ্যাক্সেস করতে চাইলে ভবিষ্যতের যে কোনও অ্যাপ্লিকেশনগুলিকে মূল অ্যাপ্লিকেশনগুলির যাদু মানগুলির সম্পর্কে জানতে / মেনে চলার দরকার নেই।
bendemes

5

আমি মনে করি ডিন হার্ডিংস উত্তরগুলি এটি খুব সুন্দরভাবে কভার করে। এটি বলেছিল যে আমি উল্লেখ করতে চাই যে ডিবি স্তরে NULLs বনাম খালি স্ট্রিংয়ের বিষয়ে কথা বলার সময় আপনার অন্যান্য ডেটা ধরণের সম্পর্কে আপনার চিন্তাভাবনা করা উচিত। কোনও তারিখ সরবরাহ না করা হলে আপনি কি ন্যূনতম তারিখ সংরক্ষণ করবেন? বা -1 যখন কোন int সরবরাহ করা হয় না? যখন আপনার কোনও মূল্য না থাকে তখন একটি মান সংরক্ষণ করার অর্থ আপনাকে তারপরে অমূল্যের পুরো পরিসীমাটির উপর নজর রাখতে হবে। প্রতিটি ডেটা টাইপের জন্য কমপক্ষে একটি করে (সম্ভবত আপনি আরও বেশি কিছু পেতে পারেন যেখানে -1 একটি আসল মান তাই আপনার কিছু বিকল্প ইত্যাদি থাকা দরকার)। আপনার যদি প্রয়োজন / অ্যাপ্লিকেশন পর্যায়ে কিছু "অদ্ভুত" করতে চান যা একটি জিনিস তবে তাদের আপনার ডেটা দূষিত করার দরকার নেই।


2
+1 - এটাকেই আমি "ম্যাজিক মান সমাধান" বলি। একটি মানের অনুপস্থিতি উপস্থাপন করতে আমাদের প্রতিটি ডেটা টাইপের জন্য একটি ম্যাজিক মান নিয়ে আসতে হবে। তদতিরিক্ত, কিছু কলামে সাধারণ যাদু মান একটি বৈধ মান হয় বা হয় এবং এইভাবে একটি নতুন যাদু মান প্রয়োজন।
টমাস

5

দুর্ভাগ্যক্রমে, ওরাকল এনআরএল এর প্রতিনিধিত্বের সাথে লম্বা শূন্যের ভ্রচার স্ট্রিংয়ের প্রতিনিধিত্বকে বিভ্রান্ত করেছিল। এগুলি উভয়ই শূন্যের সাথে একক বাইট দ্বারা অভ্যন্তরীণভাবে উপস্থাপিত হয়। এটি আলোচনাটিকে এতটা শক্ত করে তোলে।

NUL কেন্দ্রকে ঘিরে অনেকগুলি বিভ্রান্তি তিন-মূল্যের যুক্তিকে কেন্দ্র করে । নিম্নলিখিত সিউডোকোড বিবেচনা করুন:

if ZIPCODE = NULL
    print "ZIPCODE is NULL"
else if ZIPCODE <> NULL
    print "ZIPCODE is not NULL"
else print "Something unknown has happened"

আপনি তৃতীয় বার্তাটি আশা করবেন না, তবে তিনটি মূল্যবান যুক্তির আওতায় আপনি এটি পাবেন। তিনটি মূল্যবান যুক্তি মানুষকে অসংখ্য বাগের দিকে নিয়ে যায়।

বিভ্রান্তির আরেকটি উত্স হ'ল ডেটার অনুপস্থিতি থেকে অনুলিপি আঁকেন, যেমন কুকুরের কাছ থেকে একটি শব্দ আঁকেন যা রাতে ছাঁটেনি। প্রায়শই এই সূচনাগুলি এনএইউএল এর লেখক স্নেভির উদ্দেশ্যে করেছিলেন তা ছিল না।

এটি বলার পরেও, অনেকগুলি পরিস্থিতি রয়েছে যেখানে ন্যূনুয়ালি ঠিকভাবে সূক্ষ্ম তথ্যের অনুপস্থিতি পরিচালনা করে এবং আপনার পছন্দসই ফলাফলগুলি উত্পন্ন করে। একটি উদাহরণ optionচ্ছিক সম্পর্কের বিদেশী কী। যদি আপনি কোনও প্রদত্ত সারিতে কোনও সম্পর্ক না বোঝানোর জন্য কোনও নল ব্যবহার করেন তবে সেই প্রত্যাশাটি যেমনটি আপনি প্রত্যাশা করেছিলেন ঠিক তেমন একটি অভ্যন্তরীণ যোগদান থেকে বাদ পড়বে।

এছাড়াও, সচেতন থাকুন যে আপনি সঞ্চিত ডেটা (ষষ্ঠ স্বাভাবিক ফর্ম) এ সম্পূর্ণভাবে NULLS এড়িয়ে চলেন, আপনি যদি কোনও বাহ্যিক যোগদান করেন তবে আপনাকে এখনও ন্যূনসকে মোকাবেলা করতে হবে।


4

নাল ব্যবহার করুন।

'' এর মান সংরক্ষণ করার কোনও অর্থ নেই, যখন কেবল টেবিলের মধ্যে ক্ষেত্রটি অবিস্মরণীয় হয় do এটি প্রশ্নগুলি আরও সুস্পষ্ট করে তোলে।

আপনি যদি কোনও ইমেল ঠিকানা সহ ব্যবহারকারীদের সন্ধান করতে চান তবে কোন এসকিউএল কোয়েরিটি আরও স্পষ্ট এবং পাঠযোগ্য?

  1. SELECT * FROM Users WHERE email_address != ''

  2. SELECT * FROM Users WHERE email_address IS NOT NULL

  3. SELECT * FROM Users WHERE email_address != '' and email_address IS NOT NULL

আমি বলব 2 হয়। 3 যেখানে খারাপ ডেটা সংরক্ষণ করা হয় সে ক্ষেত্রে আরও শক্তিশালী।

ফর্মের ইমেল ঠিকানার ক্ষেত্রে, যা alচ্ছিক, এটি টেবিলেও প্রতিফলিত হওয়া উচিত। এসকিউএল-তে এটি একটি বাতিল ক্ষেত্র, যার অর্থ এটি জানা নেই।

আমি কেবল খারাপ ডিজাইন ছাড়া অন্য কোনও টেবিলে খালি স্ট্রিং সঞ্চয় করার কোনও যুক্তিসঙ্গত ব্যবসায়ের মূল্য সম্পর্কে ভাবতে পারি না। এটি 'নুল' বা 'ব্ল্যাক' এর স্ট্রিং মান সংরক্ষণ করার মতো এবং বিকাশকারীদের ধরে নেওয়া যে এটি নাল বা খালি স্ট্রিং। আমার কাছে, এটি খারাপ নকশা। নাল থাকাকালীন কেন স্টোর করবেন ??

কেবল নুল ব্যবহার করুন এবং আপনি সবাইকে আরও কিছুটা আনন্দিত করবেন।

অধিক তথ্য:

এসকিউএল একটি তিনটি মূল্যবান লজিক সিস্টেম ব্যবহার করে: সত্য, মিথ্যা এবং অজানা।

আরও ভাল এবং আরও বিশদ ব্যাখ্যার জন্য, আমি বিকাশকারীদের পড়ার পরামর্শ দিই: এসকিউএল ক্যোয়ারী - সত্য এবং মিথ্যা ছাড়িয়ে


3

নির্দিষ্ট প্রযুক্তিগত প্রশ্নের জন্য, সমস্যাটি খালি স্ট্রিং বনাম নয়, এটি একটি বৈধতা ব্যর্থতা । একটি খালি স্ট্রিং একটি বৈধ ইমেল ঠিকানা নয়!

দার্শনিক প্রশ্নের জন্য, উত্তর একই: আপনার ইনপুটগুলি বৈধতা দিন। যদি প্রশ্নে ক্ষেত্রের জন্য একটি খালি স্ট্রিং একটি বৈধ মান, তবে এটির জন্য এবং কোডটির প্রত্যাশা করুন; যদি না হয়, নাল ব্যবহার করুন।

একটি খালি স্ট্রিং এই প্রশ্নের উত্তর দেওয়ার জন্য একটি বৈধ ইনপুট হবে: মাইম জিরাফকে কী বলেছিল?


এমনকি বিশ্বের সেরা অভিপ্রায় সহ, বৈধতা এই সমস্যাটি সমাধান করতে পারে না - তারপরেও তাকে সারিগুলির সাথে সম্পর্কিত এমন একটি পদ্ধতি ব্যবহার করতে হবে যেখানে সমস্ত কলামকে কোনও একক মান দিয়ে সরবরাহ করতে হবে। সেক্ষেত্রে প্রশ্ন থেকেই যাবে - কোন মূল্য না থাকলে কী ব্যবহার করতে হবে? এবং উত্তর অবশ্যই হবে: মান যে কোনও মান নির্দেশ করে না। ডিবিগুলিতে এটি সাধারণত নুল হয়।
jmoreno

2

আমি নুল এবং খালি স্ট্রিং থাকার কারণ সম্পর্কে ভাবতে পারি:

  • আপনার বৈধ ইমেল ঠিকানা রয়েছে: me@example.com
  • আপনার কিছুই নেই (এবং সম্ভবত এটির জন্য জিজ্ঞাসা করা উচিত): NULL
  • আপনি জানেন যে এই ব্যক্তির কোনও ইমেল ঠিকানা নেই: Empty String.

তবে আমি এটির সুপারিশ করব না এবং আপনি জানেন যে কোনওটিই বিদ্যমান নেই কিনা তা জিজ্ঞাসা করার জন্য একটি পৃথক ক্ষেত্র ব্যবহার করব না।


1

প্রশ্নটি আমি এটি যেভাবে বুঝতে পারি তা হ'ল কোনটি NULL এবং খালি স্ট্রিংয়ের ব্যাখ্যা চয়ন করা উচিত। এটি নির্ভর করে ক্ষেত্রের কতগুলি রাজ্যে থাকতে পারে তার উপর নির্ভর করে ।

কীভাবে ডাটাবেস অ্যাক্সেস করা হচ্ছে তার উপর ব্যাখ্যা নির্ভর করে। কোডে কোনও স্তর রয়েছে যা ডেটাবেসকে পুরোপুরি বিমূ ,় করে, কোনও নীতি (দ্বি-কোলমন সহ) কাজ করে যা কাজ করে তা পুরোপুরি গ্রহণযোগ্য। (যদিও নীতিটি স্পষ্টতই নথিভুক্ত করা গুরুত্বপূর্ণ)। তবে, যদি বেশ কয়েকটি জায়গায় ডাটাবেস অ্যাক্সেস করা হচ্ছে, তবে আপনার খুব সাধারণ স্কিম ব্যবহার করা উচিত, যেহেতু কোড বজায় রাখা আরও কঠিন হবে এবং এই ক্ষেত্রে ভুল হতে পারে।


1

মূলত যৌক্তিক স্তরে "অবৈধ" মান এবং "কোনও ব্যবহারকারী ইনপুট" এর মধ্যে কোনও পার্থক্য নেই, তারা বেশিরভাগ সময় কেবলমাত্র "বিশেষ কেস" থাকে। ত্রুটি কেস।

নাল থাকা অ্যাডিটোনাল স্পেস নেয়: সিল (কলাম_উইথ_নুল / 8) প্রতি সারি বাইটে।

খালি ঘর এবং নাল উভয়ই উপায় চিহ্নিত করার ভুল উপায় / হওয়া উচিত ডিফল্ট। আপনার 2 টি "ভুল" রাষ্ট্রের প্রয়োজন হবে কেন? তারা অতিরিক্ত স্থান গ্রহণ করে এবং খালি স্ট্রিংয়ের মতো একইরকম অর্থ ব্যবহার করে কেন NULL ব্যবহার করবেন? এটি কেবল বিভ্রান্তি এবং অপ্রয়োজনীয়তার পরিচয় দেবে যখন আপনি দুটি জিনিস হ'ল অর্থ (যার অর্থ হতে পারে) ঠিক একইরকম, এটি ভুলে যাওয়া সহজ যে আপনার খালি স্ট্রিংয়ের পরিবর্তে NULL ব্যবহার করা উচিত (উদাহরণস্বরূপ। ব্যবহারকারী কিছু ক্ষেত্র বাদ দিয়েছিলেন)।

এবং আপনার ডেটা একটি জগাখিচুড়ি হতে পারে। একটি নিখুঁত বিশ্বে আপনি বলতেন "ডেটা সবসময় সঠিক থাকবে এবং আমি মনে রাখব" ... তবে যখন লোকেরা একটি দলে কাজ করতে হয় এবং প্রত্যেকে আপনার স্তরে না থাকে তবে কোথায় (এএএটি দেখতে অস্বাভাবিক নয়)। xx <> '' এবং bb.zz নিখুঁত নয়)

সুতরাং প্রতি দিন আমার দলের সদস্যদের সংশোধন করার পরিবর্তে আমি কেবল সহজ নিয়ম প্রয়োগ করি। কোনও নাল মান নেই, কখনও নয়!

নন-নুল মান গণনা করা দ্রুত ... সহজ প্রশ্ন হল এটির জন্য আপনার কী প্রয়োজন?


আমি অস্পষ্টভাবে কোথাও পড়ার কথা স্মরণ করি যে এনএলএল ব্যবহার করা ডাটাবেসের জন্য আসলে ব্যয় (গণনা এবং স্টোরেজ উভয় ক্ষেত্রে)। যে সূত্রটি আনতে তাই ভাল পয়েন্ট।
জেসেক প্রোচিয়া

ভুলে যাবেন না যে VARCHARকলামটি শূন্য হলেও স্ট্রিংয়ের দৈর্ঘ্য সঞ্চয় করতে কমপক্ষে 1 বাইট লাগবে।
dan04

খালি কোষ এবং নাল হয় উভয় উপায় কিছু চিহ্নিত করতে ভুল । সত্য না. একটি নাল একটি মানের অনুপস্থিতি নির্দেশ করার একটি উপায়। আমি বাজি দিয়েছি যে কোনও কলামগুলি নাল indicate সুতরাং, অতিরিক্ত স্থান অপ্রাসঙ্গিক হিসাবে এত ছোট। অতিরিক্ত প্রক্রিয়াজাতকরণ সম্পর্কে উদ্বেগ হচ্ছিল অকালীন অপ্টিমাইজেশন এবং অন্যান্য বিকাশকারীদের "আবিষ্কার" করার উদ্দেশ্যে তৈরি গতির গতির তুলনায় কিছুই হবে না যা আপনি ইচ্ছাকৃতভাবে খালি স্ট্রিং ব্যবহার করেছেন।
টমাস

3
নাল মান নেই । এটি অস্ট্রিচ পদ্ধতির। "আমরা বালুতে মাথা রেখে দেব এবং ঘোষণা করব যে অনুপস্থিত মান বিদ্যমান নেই"। এটি সাধারণত ম্যাজিক মান সমাধানের দিকে নিয়ে যায় যেখানে আপনাকে প্রতিটি ডাটা টাইপের জন্য একটি মানের অনুপস্থিতি উপস্থাপনের জন্য একটি ম্যাজিক মান নিয়ে আসতে হবে।
টমাস

1

আমি এটি ডিবি দৃষ্টিকোণ থেকে নয় তবে একটি প্রোগ্রামের দৃষ্টিকোণ থেকে দেখতে চাইছি। আমি জানি যে এই প্রশ্নটি এসকিউএল ক্লিকের জন্য তবে সত্যই, এখন পর্যন্ত কতজন ব্যবহারকারী সরাসরি ডেটা অ্যাক্সেস করেন?

একটি প্রোগ্রামে আমি নাল / কিছুই পছন্দ করি না। কয়েকটি ব্যতিক্রম আছে তবে তারা কেবল এটিই। এবং এই ব্যতিক্রমগুলি কেবলমাত্র খারাপ বাস্তবায়ন।

সুতরাং যদি ব্যবহারকারী এটি ইমেল না রাখেন তবে এমন কিছু হওয়া উচিত যা নির্ধারণ করে যে এটি বৈধ কিনা। যদি ফাঁকা ইমেলটি ঠিক থাকে তবে তা ফাঁকা স্ট্রিং প্রদর্শন করে। যদি ব্যবহারকারী কোনও ইমেল না রাখেন এবং এটি কোনও নিয়ম লঙ্ঘন করে তবে অবজেক্টটি এটি নির্দেশ করে।

নাল অর্থের ধারণাটি পুরানো স্কুল এবং আধুনিক প্রোগ্রামারদের প্রায়শই কাজ করা উচিত something

এমনকি ডিবি ডিজাইনে কেন ইমেল ক্ষেত্রটি নালগুলিকে অনুমতি দেয় না এবং শূন্য দৈর্ঘ্যের স্ট্রিং থাকতে পারে এবং ব্যবহারকারীর ইনপুট কিছু আছে কিনা তা নির্দেশ করে এমন একটি ক্ষেত্র থাকতে পারে? একটি ডিবিএমএস জিজ্ঞাসা করার জন্য কি এতটুকু? আমার মতে, ডিবি ব্যবসায়ের যুক্তি বা প্রদর্শন যুক্তি না পরিচালনা করা উচিত নয়। এটি তার জন্য নির্মিত হয়নি এবং সুতরাং এটি পরিচালনা করার জন্য খুব খারাপ কাজ করে।


ইমেল ক্ষেত্রটি কেন নালগুলিকে অনুমতি দেয় না এবং একটি শূন্য দৈর্ঘ্যের স্ট্রিং রাখতে পারে না - সহজ ভাষায়: কারণ ডেটাবেস সম্পর্কে কিছু জানেন এমন যে কোনও বিকাশকারী কখনই সেই ফাঁকা স্ট্রিংয়ের যাদুটির অর্থ আশা করতে পারে না। আপনি প্রতিটি ডাটাবেসে মৌলিকভাবে ইতিমধ্যে যা বিদ্যমান তা উপস্থাপন করার জন্য আপনার নিজের যাদু মান তৈরি করার চেষ্টা করছেন: একটি মানের একটি অনুপস্থিতি উপস্থাপন করার ধারণা। চাকা পুনরুদ্ধার কেন? এছাড়াও, পুরুল স্কুল থেকে অনেক দূরে, অনেক দূরে NULLS এর ধারণা। নাল হ'ল রিলেশনাল ডাটাবেস ডিজাইন বোঝার মূল প্রস্তর।
থমাস

হাঃ হাঃ হাঃ. যেমন আমি একটি প্রোগ্রামার দৃষ্টিকোণ থেকে বলেছি নুলগুলি প্রায় সবসময়ই বাটে ব্যথা হয় এবং প্রায়শই ব্যবসায় লজিকের প্রয়োজন হয় না। আমি ব্যক্তিগতভাবে, একজন বিকাশকারী হিসাবে, সম্পর্কের নকশার জন্য খুব বেশি যত্ন করি না। আমি যদি করতাম তবে আমি একজন ডিবি ছেলে হতাম। যদি আমি কোনও ডিবি থেকে শূন্যতা পাই তবে আমি প্রায় সর্বদা এটি খালি স্ট্রিংয়ের মতো যুক্তিযুক্ত কিছুতে রূপান্তর করি তবে আমার গৌরবময় ওওপি নকশাটি যাদু করে। কাঠামো বিশ্ব জুড়ে এই নির্বোধ নাল ডিবিএ বাহিনীকে যত্ন করে। আমি জানি ডিবি পরিবারকে এটি মোকাবেলা করতে হবে এবং আমি আপনার জন্য অনুভব করছি। তবে প্রোগ্রামার হিসাবে আমার দরকার নেই। আমার আরও ভাল সমাধান আছে।
এলগ্রিঙ্গো গ্র্যান্ডে

আপনাকে "কখনই" নালার সাথে ডিল করতে হবে না। সুতরাং, আপনি যা বর্ণনা করছেন তা হ'ল ম্যাজিক মান সমাধানের সাথে মিলিত উটপাখি সমাধান। "আমি অনুপস্থিত মানগুলি উপস্থিত রয়েছে এবং আমি সমস্ত নাল পূর্ণসংখ্যা -1 এ রূপান্তর করব" এটিকে আমি উপেক্ষা করব। দিনটি না আসা পর্যন্ত -1 আসল মান। এটি লক্ষ করা উচিত যে এমএস .NET- তে জেনেরিক যুক্ত করার অন্যতম কারণ হ'ল ডেটাবেস এবং অ্যাপ্লিকেশন কোডের মধ্যে বিশাল প্রতিবন্ধকতা মেলে না এবং মূলত মধ্য-স্তরীয় কোডে নাল প্রকাশের চারদিকে ঘুরানো ছিল। ব্যবসায়িক যুক্তিগুলিতেও এই "নির্বোধ নালাগুলি" বিদ্যমান।
থমাস

কিছু পূর্ণসংখ্যার ডিবিতে অনুপস্থিত (বা নাল হয়) এর অর্থ এই নয় যে আমাকে এটি -1 দিয়ে উপস্থাপন করতে হবে বা একটি নল (ইনট) প্রেরণ করতে হবে। আপনি যদি মনে করেন যে নালগুলি মোকাবেলা করার একমাত্র উপায় তবে আপনি প্রোগ্রামিংটি খুব ভাল বুঝতে পারবেন না। নাল মনে রাখুন কিছুই হিসাবে একই জিনিস নয়। যেমনটি আপনি বলেছেন, নাল কোনও ধরণের ডেটা স্ট্রাক্টে অনুপস্থিত মানগুলির জন্য স্থান ধারককে উপস্থাপন করে। এর অর্থ কিছু। ব্যবসায়িক যুক্তি খুব কমই (যা কখনই সমান নয়) এই ধারণার প্রয়োজন কারণ এটি তথ্যটি নয়, বহির্ভুত সম্পর্কে। এবং যখন এটি বাতিল হয় খুব কমই এটি উপস্থাপনের সেরা উপায়।
এলগ্রিঙ্গো গ্র্যান্ডে

এমনকি ব্যবসায়িক যুক্তির জন্য অনুপস্থিত মানগুলি (অর্থ উপস্থাপন করা) হিসাবে গণনা করতে হবে এবং এটি আমার অভিজ্ঞতায় সত্য, আমি গত 20 বছরে দেখেছি বা নির্মিত প্রায় প্রতিটি সিস্টেমে। ডাটাবেসটি ব্যবসায়ের তথ্যগুলি ক্যাপচার এবং সঞ্চয় করার জন্য মডেলিং করছে। ব্যবসায়ের যুক্তি যদি ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম হতে চায় তবে এটি নালদের সাথে কীভাবে মোকাবেলা করতে হবে তা অবশ্যই জানতে হবে। এটি কোনও কাস্টম কাঠামো, যাদু মান বা জেনেরিক অপ্রাসঙ্গিক। ব্যবসায়িক যুক্তির জন্য ডাটাবেস থেকে অনুপস্থিত মানের রশিদ পরিচালনা করার ক্ষমতা এবং ডাটাবেসটিতে অনুপস্থিত হিসাবে একটি মান চিহ্নিত করার ক্ষমতা প্রয়োজন।
টমাস

-1

আমি মনে করি না যে এটি খুব বেশি গুরুত্ব দেয়, তবে আমি যখন এনইউএল থাকি তখন এটি আরও ভাল লাগে।

যখন আমি একটি সারণীতে প্রদর্শিত ডেটা দেখি (যেমন এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে), তখন আমি অনুপস্থিত মানটিকে আরও ভালভাবে পার্থক্য করতে পারি যদি এটি বলে যে নুআলএল এবং ব্যাকগ্রাউন্ডটি ভিন্ন রঙের হয়।

যদি আমি একটি ফাঁকা জায়গা দেখি তবে আমি সবসময় ভাবছিলাম যে এটি সত্যিই ফাঁকা বা কোনও সাদা জায়গা বা কিছু অদৃশ্য অক্ষর রয়েছে। NULL এর সাথে এটি প্রথম দর্শনে খালি গ্যারান্টিযুক্ত।

এখানে চিত্র বর্ণনা লিখুন

আমি সাধারণত অ্যাপ্লিকেশনটির মানগুলিকে আলাদা করতে পারি না, কারণ এটি অপ্রত্যাশিত এবং অদ্ভুত যে নাল এবং খালি স্ট্রিংয়ের অর্থ অন্যরকম। এবং বেশিরভাগ সময়, আমি একটি প্রতিরক্ষা ব্যবস্থা গ্রহণ করি এবং উভয় রাজ্যের সাথেই ডিল করি। তবে একজন মানুষ হিসাবে আমার কাছে ডেটা দেখার সময় প্রক্রিয়া করা সহজ হয় UL


এই কিছু সারগর্ভ প্রস্তাব উপর পয়েন্ট হয়েছে এবং পূর্বে 12 উত্তর ব্যাখ্যা বলে মনে হচ্ছে না
মশা

@ গ্যাनेट: আমি দ্বিমত পোষণ করছি, উত্তরে কেউ এখনও ডেটা দেখার দিকটি উল্লেখ করেনি। এখানে কেবলমাত্র একটি নুল মান রয়েছে, তবে প্রচুর মানগুলি খালি স্ট্রিংয়ের মতো দেখতে পাওয়া যায় (কেবল সাদা অংশ নয়, তবে প্রচুর অদ্ভুত আচরণকারী ইউনিকোড চরিত্রও রয়েছে)। সমস্যার এই দিকটি উল্লেখ করে আমি আর কোনও উত্তর দেখতে পাচ্ছি না।
টম পাউরেক

যতটা আমি বলতে পারেন এটা বেশ ভাল পরিপূর্ণ ছিল দ্বিতীয় শীর্ষ উত্তর যে 5 বছর আগে পোস্ট করা হয়েছে: ইত্যাদি "এটা কোনো প্রোগ্রামার একটি ডাটাবেস এ খুঁজছেন ... থেকে সুস্পষ্ট"
মশা

@ গ্যাनेट: আমি আপনার বক্তব্যটি দেখতে পাচ্ছি, যদিও আমি মনে করি লেখক একই জিনিসটি বোঝায় না। আমি বিশ্বাস করি যে সে সম্পর্কে আরও অনেকগুলি NUL liesচ্ছিক ক্ষেত্রগুলি বোঝায়, তবে খালি স্ট্রিংটি প্রয়োজনীয় ক্ষেত্রগুলির জন্যও ব্যবহার করা যেতে পারে, সুতরাং মূল্য অনুপস্থিতির জন্য NULL আরও যুক্তিযুক্ত। আমি তার সাথে একমত. তবে আমার উত্তরটি এই বিষয়টির দিকে নির্দেশ করে যে খালি স্ট্রিংটি NULL মানের মতো দ্ব্যর্থহীন নয়, কারণ অনেকগুলি জিনিস খালি স্ট্রিং না হয়ে প্রথম দর্শনে খালি স্ট্রিংয়ের মতো দেখতে পারে।
টম পাউরেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.