ওরাকলে নল নম্বর ব্যবহার না করার কারণ?


12

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

--- সম্পাদনা

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


2
আপনার অর্থ, "তাদের এপিআই নির্দিষ্ট করে এটি কি" ব্যতীত?
রবার্ট হার্ভে

হ্যাঁ, আমি কেন আরও আগ্রহী যে তাদের এপিআই প্রথমে এটি নির্দিষ্ট করে দেবে; এই অনুশীলনের কোনও কারণ আছে, বা এটি কি কেবল কিছু উন্মাদনা?

3
সর্বোচ্চ আদেশের পাগল!
ফিলি

উত্তর:


17

বাস্তবিকভাবে, প্রয়োজনটি পাগল। সমস্ত দুর্দান্ত পাগল ধারণার মতো, তবে এটি সম্ভবত সম্ভাব্য যুক্তিসঙ্গততার এক ঝাঁকুনির উপর ভিত্তি করে এমন লোকদের দ্বারা প্রসঙ্গের বাইরে যাঁর অন্তর্নিহিত যৌক্তিক ধারণাটি বোঝে না।

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

আপনি যদি এমন কোনও ডাটাবেস স্কিমা ডিজাইন করতে যাচ্ছেন যে কোনও NULLমান অনুমোদিত নয়, তবে কিছু অজানা তা নির্দেশ করার জন্য যাদুর মানগুলি একা থাকতে দেওয়া মজাদার নয়। এটি NULLমানগুলির অনুমতি দেয় এমন সমস্ত সমস্যার সাথে সাথে এটি জাদু মানগুলির যাচাই করতে অতিরিক্ত কোড যুক্ত করে যা সমস্ত জায়গাতেই পুনরাবৃত্তি করতে হয়। ডাটাবেস ডিজাইন নির্বিশেষে যাদুর মানগুলি পাস করার জন্য এমন একটি এপিআই বিকাশ করা কোনও অর্থবোধ করে না - যদি আপনি নিজের কোডটিকে যাদু মানগুলির জন্য চেক দিয়ে আবদ্ধ করতে চলেছেন তবে আপনার সত্যিকার অর্থে পাগলামিটি অন্য সিস্টেমে প্রচার করতে দেওয়া উচিত নয় ।


+1 এবং ম্যাজিক মানগুলি পরীক্ষা করার জন্য অতিরিক্ত কোডগুলি সুপরিচিত ফাংশনগুলি ব্যবহার করতে পারে না COALESCE()- তাই এটি আরও জটিল হয়ে ওঠে।
ypercubeᵀᴹ

এবং মানগুলি সেই কলামের যে কোনও সূচীতে সংরক্ষণ করা দরকার। সূচকগুলিকে নাল মান সংরক্ষণ করতে হবে না।
ট্রিপ কাইনেটিক্স

15

NULL এর পরিবর্তে কোনও যাদু মান ব্যবহার করার কোনও বৈধ কারণ নেই । এটি এই ঝামেলা তৈরির কারও চিন্তার প্রক্রিয়া হতে পারে। তারা এ জাতীয় কিছু লিখেন:

 SELECT c1, c2 FROM t1 WHERE c3 < 30;

যখন এটি ফলাফল প্রত্যাশিত ফলাফলগুলি না ফিরিয়ে দেয় তখন তারা বুঝতে পারে যে এটিতে NULL অন্তর্ভুক্ত নয় এবং এটি লিখতে হবে:

SELECT c1, c2 FROM t1 WHERE c3 < 30 OR c3 IS NULL;

তারা এগুলি লিখতে ভবিষ্যতে লিখতে বা ভুলে যেতে চায় না, তাই তারা সমস্ত NULLS -5000 তৈরির সমাধান নিয়ে আসে। যাদুকরীভাবে তাদের মূল ক্যোয়ারী কোনও পরিবর্তন ছাড়াই NULL পরিচালনা করে। তারা যা বুঝতে পারে না তা হ'ল এখন যে কেউ এই মানগুলি বাদ দিতে চায় তাদের এটি লিখতে হবে:

SELECT c1, c2 FROM t1 WHERE c3 < 30 AND c3 <> -5000;

অথবা যদি তারা এই মানগুলি চায় এবং উচ্চতর পরিসীমা অনুসন্ধান করছে:

SELECT c1, c2 FROM t1 WHERE c3 > 40 OR c3 = -5000;

তারা আরও বুঝতে পারে না যে নিম্নলিখিতগুলি আর অর্থবহ হবে না:

SELECT c1, c2 FROM t1 WHERE c3 IS NULL;

পরিবর্তে একজন ব্যক্তির যাদু মান মনে রাখতে হবে। প্রতিটি ডেটাটাইপ ব্যবহারের সাথে তাদের আরও যাদু মানগুলি মনে রাখতে হবে যেমন 1/1 // 1900, "জেড", -5000। তদ্ব্যতীত, যখন ম্যাজিক মান ডেটাতে থাকে তাদের অবশ্যই বিকল্প যাদু মানগুলি মনে রাখতে হবে।

সুতরাং, একটি নির্দিষ্ট ক্ষেত্রে এটি ডিস্কের স্থান, সূচী আকার, ক্যোয়ারী পার্সিং, ধারাবাহিকতা ইত্যাদি উল্লেখ না করে অন্যান্য ক্ষেত্রে ব্যয় করে কোডটিকে সহজ করে তোলে


8

এটি সম্পূর্ণ উন্মাদনা এবং এর কোন যৌক্তিকতা নেই। NULLকোনও মানের অনুপস্থিতি উপস্থাপন করার জন্য এবং -5000 এর মতো একটি আসল মান ব্যবহার করার জন্য এটি তৈরি হয়েছিল bon

সাধারণত আমি এই সংক্ষেপে একটি উত্তর লিখব না, তবে প্রশ্নটি ডিবিএ.সে সবচেয়ে বেশি দেখা যায় এবং আরও উত্তর আরও ভাল the


5

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

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

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

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

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

সুতরাং অ্যাপ্লিকেশন পর্যায়ে আপনি যে নালাগুলি চান তা এড়িয়ে চলুন এবং আপনার ডাটাবেসে তাদের সাথে ডিল করুন যেখানে আপনি এটিকে গ্রহণ করবেন না অন্যথায় জিরাফ + জিরাফ = হিপ্পোর মতো আপনার অনর্থক ডেটা র্যাংলিং আপনাকে সমস্যায় ফেলবে।


2
আমার বাবা-মা অলস ছিলেন না এবং উপায় দ্বারা আমার কোনও মাঝের নাম নেই। সমস্ত মানুষ মার্কিন যুক্তরাষ্ট্রে বাস করে না।
ypercubeᵀᴹ

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

কোন অপরাধ নেওয়া হয়নি। আমি আসলে আপনার উত্তর upvated। আমি মনে করি আপনি আপনার মূল পয়েন্টটি দিয়ে পেরেকটি আঘাত করেছেন যে ডেটাবেজে নলগুলি গ্রহণ না করা / মঞ্জুর করার এবং ন্যূসকে একটি যাদু মানের সাথে প্রতিস্থাপনের মধ্যে পার্থক্য রয়েছে।
ypercubeᵀᴹ

5
আমার মাঝের নামটি "-5000" হলে আমি এটি পছন্দ করতাম! : ডি
ফিলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.