ডাটাবেস থেকে ভুল নাল এন্ট্রি থেকে রক্ষা ডিজাইন এবং অনুশীলন


9

আমার প্রোগ্রামের একটি অংশ প্রক্রিয়াকরণের জন্য আমার ডাটাবেসে অনেক টেবিল এবং কলাম থেকে ডেটা আনে। কিছু কলাম হতে পারে nullতবে বর্তমান প্রক্রিয়াকরণ প্রসঙ্গে এটি একটি ত্রুটি।

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

বিরল তবে সম্ভাব্য nullএন্ট্রিগুলি পরিচালনা করার জন্য কি কোনও ভাল স্থাপত্য বা নকশার নীতি রয়েছে ?

জাভা দিয়ে সমাধানগুলি প্রয়োগ করা সম্ভব হওয়া উচিত তবে আমি ট্যাগটি ব্যবহার করিনি কারণ আমি মনে করি সমস্যাটি কিছুটা ভাষা-অজ্ঞাত is


কিছু চিন্তা যা আমার নিজের মধ্যে ছিল:

নাল ব্যবহার করা হচ্ছে না

ডাটাবেসে একটি নল নীল বাধা ব্যবহার করা সবচেয়ে সহজ হবে।

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

নির্লিপ্তভাবে নালপয়েন্টার এক্সসেপশন এর উপর নির্ভর করে

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

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

nullপ্রতিটি অ্যাক্সেসের আগে পরীক্ষা করা এবং কাস্টম ব্যতিক্রম ছোঁড়া

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

তবে আমি যদি কোথাও এটি চেক করতে ভুলে যাই? এছাড়াও আমি তখন আমার কোডটি নাল চেকগুলি দিয়ে বিশৃঙ্খলা করি যা কখনই বা খুব কমই প্রত্যাশিত হয় না (এবং অবশ্যই ব্যবসায়ের লজিক প্রবাহের অংশ নয়)।

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


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

সম্পাদনা:

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


5
"কিছু কলামগুলি শূন্য হতে পারে তবে বর্তমান প্রক্রিয়াকরণ প্রসঙ্গে এটি একটি ত্রুটি ... ... সন্নিবেশটি টেবিলের মধ্যে একটি নাল ফেলে দিলে আমি সন্নিবেশটি ব্যর্থ হতে চাই না" "এই দুটি প্রয়োজনীয়তা হ'ল পরস্পরবিরোধী. এটা অসম্ভব যতক্ষণ না আপনি দুই শর্ত এক শিথিল একটি সমাধান খুঁজে বের করা।
কিলিয়ান পাথ

@ কিলিয়ানফথ ওয়েল, আমার শিথিলতা হ'ল "বর্তমান প্রসেসিং" প্রসঙ্গে ত্রুটিটি সন্নিবেশ করানোর চেয়ে কম তীব্র। তাই আমি বিরল প্রক্রিয়াকরণ ত্রুটিগুলি গ্রহণ করি তবে এগুলি পরিচালনা করার জন্য আমি একটি ভাল দৃ rob় নকশা রাখতে চাই। এ কারণেই নট নুল, যা অন্যথায় ভাল সমাধান হতে পারে, এখানে এখানে সম্ভব নয়।
jyot

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

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

1
ডাটাবেসে তাদের নাল হিসাবে চিহ্নিত করা সর্বোত্তম সমাধান হতে পারে, যদি কোনও কলামটি অবিচ্ছেদ্য হয়, তবে কোডটি যখন হয় তখন এটি পরিচালনা করতে হবে, যদিও এটি প্রত্যাশিত না হয় কারণ স্টোরেজ মেকানিজম এটির অনুমতি দেয়।
জন রায়নার

উত্তর:


9

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

আপনি যদি একটি ORM ব্যবহার করে থাকেন তবে প্রতিটি রেকর্ড প্রক্রিয়া করার আগে আপনাকে আপনার সমস্ত নাল চেক করতে হবে। আমি একটি recordIsValid(recordData)টাইপ পদ্ধতিটি সুপারিশ করব , সেভাবে আপনি (আবার) সমস্ত নাল-চেকিং এবং অন্যান্য বৈধতা যুক্তি যুক্ত করে রাখতে পারেন। আমি অবশ্যই আপনার বাকী প্রসেসিংয়ের যুক্তিকে নাল চেকগুলিতে মিশ্রিত করব না।


আপনাকে ধন্যবাদ, এটি ভাল অন্তর্দৃষ্টি! আমি সত্যিই একটি ওআরএম ব্যবহার করছি, সুতরাং সেই স্তরের চেকগুলি কার্যকর হবে না। কিন্তু আমি অধ্যবসায়ী বিষয় থেকে বাস্তব ডোমেন অবজেক্টে কিছু ম্যাপিংও করেছি। আমি যাচাই করে নেব যে কোনও প্রাকপ্রসেসিং পদক্ষেপে ম্যাপিং করা এবং বৈধকরণ করা সম্ভব হবে কিনা।
jyot

এবং যদি আপনি আপনার ওআরএম স্যুইচ করেন, তবে কি তবে? উত্স এ এটির পক্ষে ভাল (ডক ব্রাউন এর উত্তর দেখুন))
রবি ডি

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

এটি ইটিএল প্রবাহে আরও ঘটতে হবে। আপনি এখনও এইভাবে সদৃশ প্রচেষ্টা ঝুঁকিপূর্ণ।
রবি ডি

6

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

এই লক্ষ্যে, প্রয়োগ করুন যে ডেটাবেস, ডেটাবেসের এক অনুমোদিত, স্থায়ী সংগ্রহস্থলের মধ্যে তথ্য সঠিক is নাল বাধা না যোগ করে এটি করুন Do তারপরে আপনার কোডটি ব্যর্থ হতে পারে তবে এই ব্যর্থতাগুলি তত্ক্ষণাত আপনাকে বাগগুলি সম্পর্কে অবহিত করবে, যা আপনাকে ইতিমধ্যে ডেটা হারাতে পারে এমন সমস্যাগুলি সংশোধন করার অনুমতি দেয়। এখন আপনি সহজেই বাগগুলি সনাক্ত করতে সক্ষম হন, আপনার কোডটি পরীক্ষা করতে পারেন এবং এটি দুটিবার পরীক্ষা করতে পারেন। আপনি ডেটা হ্রাস এবং প্রক্রিয়ায় ত্রুটিগুলি সংশোধন করতে সক্ষম হবেন, ডেটা প্রবাহিত প্রক্রিয়াকরণকে খুব সহজতর করুন কারণ আপনাকে নাল সম্পর্কে চিন্তা করার দরকার নেই।


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

@ জ্যোতি ঠিক আছে আপনি হ'ল হতাশার বিষয় যখন আপনি পরিষ্কার পদ্ধতিতে জিনিসগুলি না করতে পারেন। আশা করি আমার উত্তরটি অন্যদের ক্ষেত্রে কমপক্ষে কার্যকর হবে যাদের একই রকম সমস্যা রয়েছে তবে যারা সত্যটির পরে জঞ্জাল পরিষ্কার করার পরিবর্তে মূল কারণটিতে আক্রমণ করতে সক্ষম হয়েছেন।
মনিকা

5

প্রশ্নের এই বাক্যটি সম্পর্কে:

এটি "তাত্ত্বিকভাবে" হওয়া উচিত নয়, তাই যদি এটি খারাপ ডেটা বা কোডের কোনও বাগের দিকে নির্দেশ করে।

আমি সর্বদা এই উদ্ধৃতিটির ( এই নিবন্ধটির সৌজন্যে ) প্রশংসা করেছি :

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

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

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

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

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

এই সমস্ত সমস্যার পাশ কাটাবার একটি উপায় হ'ল এমন একটি API স্তর সন্নিবেশ করা যা আপনি যে প্রোগ্রামটি লিখেন সেগুলি এবং প্রকৃত ডাটাবেসগুলির মধ্যে নিয়ন্ত্রণ করে।

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

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


"যদি আপনার কাছে এমন প্রোগ্রাম রয়েছে যা আপনার ডাটাবেসে ভুল করে ডেটা areোকাচ্ছে, তবে সেগুলি প্রোগ্রামগুলি ভেঙে গেছে এবং এটি ঠিক করা দরকার" " এটি তাত্ত্বিক ক্ষেত্রেও দুর্দান্ত, তবে বাস্তবতা হ'ল তারা এখনও রেকর্ড যুক্ত করবে যখন কিছু কমিটি "এনএ" বা "কোনওটিই" ব্যবহার করবেন না সে নিয়ে বিতর্ক অব্যাহত রাখবে।
জেফো

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

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

@ ড্যানিয়েলপ্রাইডেন - আমি টেক্সট বাক্সের লেবেলে উচ্চ-পরিচালনা নিয়ে বিতর্ক করে বৈঠকে বসেছি। আপনি যুক্তি দিতে পারেন যে আপনি অ্যাপ্লিকেশন বা ডাটাবেসে এটি নামকরণ করতে যাচ্ছেন তার সাথে এর কোনও সম্পর্ক নেই, তবে এটি করে।
জেফো

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

2

" বিরল তবে সম্ভাব্য নাল এন্ট্রিগুলি পরিচালনা করার জন্য কি কোনও ভাল আর্কিটেকচার বা ডিজাইনের নীতি আছে? "

সহজ উত্তর - হ্যাঁ

সংক্ষিপ্তসার ETL

ডাটাবেসে যাওয়ার জন্য ডেটা পর্যাপ্ত মানের রয়েছে তা নিশ্চিত করার জন্য কিছু সামনের সামনের প্রক্রিয়াজাতকরণ চালান Car ড্রপ ফাইলে থাকা কোনও কিছুর পিছনে রিপোর্ট করা উচিত এবং কোনও পরিষ্কার ডেটা ডাটাবেসে লোড করা যায়।

এমন একজন হিসাবে যিনি উভয় শিকারী (দেব) এবং গেম রক্ষক (ডিবিএ) ছিলেন, আমি তিক্ত অভিজ্ঞতা থেকে জানি যে তৃতীয় পক্ষগুলি তাদের ডেটা সমস্যাগুলি কেবল বাধ্য না করা হলে তাদের সমাধান করবে না। ক্রমাগত পিছনের দিকে বাঁকানো এবং মাধ্যমে ডেটা ম্যাসেজ করা একটি বিপজ্জনক নজির সেট করে।

মার্ট / সংগ্রহস্থলের প্রয়োগ

এই পরিস্থিতিতে, কাঁচা তথ্য সংগ্রহ ডিবিতে ঠেলাঠেলি করা হয় এবং তারপরে একটি স্যানিটাইজড সংস্করণটি মার্ট ডিবিতে ধাক্কা দেওয়া হয় যা অ্যাপ্লিকেশনগুলি এর পরে অ্যাক্সেস পায়।

ডিফল্ট মান

যদি আপনি কলামগুলিতে বুদ্ধিমান ডিফল্ট মান প্রয়োগ করতে পারেন তবে এটি থাকা উচিত যদি এটি একটি বিদ্যমান ডাটাবেস হয় তবে এটি কিছু কাজ জড়িত করতে পারে।

তাড়াতাড়ি ব্যর্থ

অ্যাপ্লিকেশন, রিপোর্ট স্যুট, ইন্টারফেস ইত্যাদির গেটওয়েতে কেবলমাত্র ডেটা সম্পর্কিত সমস্যাগুলি সমাধান করা লোভনীয় I'd আপনি যদি ডিবিতে অন্য কোনও উইজেট আঁকেন তবে আপনাকে সম্ভবত একই সমস্যার মুখোমুখি হতে হবে। ডেটা মানের সমস্যা সম্পর্কিত ঠিকানা।


+1 আমি এটিই করব, সমস্ত ডেটা সংগ্রহ করুন এবং আপনার অ্যাপ্লিকেশনটির প্রক্রিয়া করার জন্য একটি বৈধ ডেটা সেট তৈরি করুন।
কুয়েবল

1

যখনই আপনার ব্যবহারের কেস একটি ভাল ডিফল্ট মান দ্বারা নিরাপদে NULL প্রতিস্থাপন করতে দেয়, আপনি বা SELECTব্যবহার করে SQL বিবৃতিতে রূপান্তর করতে পারেন । পরিবর্তে তাইISNULLCOALESCE

 SELECT MyColumn FROM MyTable

একটি লিখতে পারেন

 SELECT ISNULL(MyColumn,DefaultValueForMyColumn) FROM MyTable

অবশ্যই, এটি তখনই কার্যকর হবে যখন ওআরএম সরাসরি নির্বাচিত বিবৃতিগুলি পরিচালনা করতে বা প্রজন্মের জন্য পরিবর্তনযোগ্য টেম্পলেট সরবরাহ করতে দেয়। একজনকে নিশ্চিত হওয়া উচিত যে কোনও "আসল" ত্রুটি এইভাবে মুখোশপ্রাপ্ত নয়, তাই কেবলমাত্র যদি ডিফল্ট মান দ্বারা প্রতিস্থাপন করা NUL এর ক্ষেত্রে আপনি চান ঠিক তেমনটি প্রয়োগ করুন।

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

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


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

@ রবিডি: এই মন্তব্যের জন্য ধন্যবাদ, আমি সেই অনুযায়ী আমার উত্তর পরিবর্তন করেছি। তবে এটি "আরও ভাল" হলে বিতর্কযোগ্য। যখন CRUD কোডটি এক জায়গায় থাকে, সদৃশ ডিফেন্সি কোডটি খুব বেশি সমস্যা নাও হতে পারে। এবং যদি এটি না হয়, ইতিমধ্যে কিছু কোড নকল ইতিমধ্যে আছে।
ডক ব্রাউন

সাধারণ সিআরইউডি অপারেশন অবশ্যই আদর্শ। তবে বাস্তব বিশ্বে সিস্টেমে প্রায়শই জটিল ইউআই ভিউ, ব্যবহারকারী উত্পন্ন ডেটা উইজার্ডস, রিপোর্ট ইত্যাদি থাকে But আপনি যা বর্ণনা করেছেন তা ব্রাউনফিল্ড বিকাশে আরও ভাল।
রবি ডি

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

1

ওপি একটি উত্তর অনুমান করছে যে দম্পতিরা ব্যবসায়িকভাবে ডেটাবেস প্রযুক্তিগত বিশদ বিবরণ সহ নিয়ম করে।

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

এটি সমস্ত ব্যবসায়ের নিয়ম। ব্যবসায়ের বিধিগুলি নাল প্রতি-সে সম্পর্কে যত্ন করে না। সর্বোপরি এটি জানে যে ডাটাবেসটি বাতিল হতে পারে, 9999, "বিইউ!" ... এটি অন্য একটি মান। এটি, একটি আরডিবিএমএসে নালটির আকর্ষণীয় বৈশিষ্ট্য রয়েছে এবং অনন্য ব্যবহারগুলি মোট।

"নাল-নেস" প্রদত্ত ব্যবসায়িক বস্তুর (গুলি) এর জন্য যা বোঝায় তার একমাত্র বিষয় ...

বিরল তবে সম্ভাব্য নাল এন্ট্রিগুলি পরিচালনা করার জন্য কি কোনও ভাল আর্কিটেকচার বা ডিজাইনের নীতি রয়েছে?

হ্যাঁ.

  • ক্লাসে ব্যবসায়ের নিয়ম রাখুন।
  • প্রতিলিপি ব্যবসায়ের ক্লাস এবং ডেটা স্টোরকে ডুপল করে উপযুক্ত কোড লেয়ারে থাকতে হবে। আপনি যদি ওআরএম কোডে রাখতে না পারেন তবে অন্তত এটি ডাটাবেসে রাখবেন না।
  • সম্ভব ডেটাবেস বোবা করুন, এখানে কোনও ব্যবসায়ের নিয়ম নেই। এমনকি মানকে ডিফল্ট করার মতো নিরীহ বিষয়গুলি আপনাকে কামড় দেবে । সেখানে.
  • ডাটাবেস থেকে আসা এবং আসা ডেটা বৈধ করুন। এবং অবশ্যই এটি করা হয় ডাব্লু / ব্যবসায়িক সামগ্রীর প্রসঙ্গে।

ডেটা পুনরুদ্ধারের উপর ব্যতিক্রম ছুঁড়ে ফেলা অর্থহীন নয়।

প্রশ্নটি "আমার কি 'খারাপ' ডেটা সংরক্ষণ করা উচিত"? এটা নির্ভর করে:

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

0

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


ডাটাবেস স্তর

আপনি নালাগুলি নিষেধ করতে পারেন ; যদিও এখানে এটি অযৌক্তিক।

আপনি প্রতি কলাম ভিত্তিতে একটি ডিফল্ট কনফিগার করতে পারেন :

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

আপনি একটি ট্রিগার কনফিগার করতে পারেন , যাতে সন্নিবেশের পরে অনুপস্থিত মানগুলি স্বয়ংক্রিয়ভাবে গণনা করা যায়:

  • এই গণনা সম্পাদন করার জন্য প্রয়োজনীয় তথ্য উপস্থিত থাকা প্রয়োজন present
  • এটি ধীর করবে insert

অনুসন্ধান স্তর

অসুবিধাগুলি উপস্থিত থাকলে আপনি সারিগুলি এড়িয়ে যেতে পারেন null:

  • এটি মূল যুক্তিকে সহজ করে তোলে
  • এটি "খারাপ সারিগুলি" সনাক্ত করতে বাধা দেয়, সুতরাং তাদের পরীক্ষা করার জন্য আরও একটি প্রক্রিয়া প্রয়োজন
  • এটি প্রতিটি ক্যোয়ারী চালিত করা প্রয়োজন

আপনি ক্যোয়ারিতে একটি ডিফল্ট মান প্রদান করতে পারেন :

  • এটি মূল যুক্তিকে সহজ করে তোলে
  • এটি "খারাপ সারিগুলি" সনাক্ত করতে বাধা দেয়, সুতরাং তাদের পরীক্ষা করার জন্য আরও একটি প্রক্রিয়া প্রয়োজন
  • এটি প্রতিটি ক্যোয়ারী চালিত করা প্রয়োজন

দ্রষ্টব্য: প্রতিটি ক্যোয়ারী তৈরির জন্য যদি আপনার কিছু স্বয়ংক্রিয় পদ্ধতি থাকে তবে তা কার্যকরভাবে সমস্যা হয় না।


আবেদন স্তর

আপনি নিষিদ্ধের জন্য টেবিলটি প্রাক-চেক করতে পারেন null:

  • এটি মূল যুক্তিকে সহজ করে তোলে
  • এটি সময় থেকে ব্যর্থতার উন্নতি করে
  • এটির জন্য প্রাক-চেক এবং অ্যাপ্লিকেশন যুক্তি সামঞ্জস্য রাখা প্রয়োজন

কোনও নিষিদ্ধের মুখোমুখি হওয়ার সময় আপনি প্রসেসিংয়ে বাধা দিতে পারেন null:

  • কোন কলামগুলি হতে পারে nullএবং কোনটি হতে পারে না তার জ্ঞানটিকে সদৃশ করা এড়ানো যায়
  • এটি এখনও তুলনামূলকভাবে সহজ (কেবল একটি চেক + রিটার্ন / নিক্ষেপ)
  • এটির জন্য আপনার প্রক্রিয়াটি পুনরায় শুরু হতে হবে (আপনি যদি ইতিমধ্যে কোনও ইমেল প্রেরণ করেন তবে এটি দুবার বা একশ বার প্রেরণ করতে চান না!)

কোনও নিষিদ্ধের মুখোমুখি হওয়ার সময় আপনি সারিটি এড়িয়ে যেতে পারেন null:

  • কোন কলামগুলি হতে পারে nullএবং কোনটি হতে পারে না তার জ্ঞানটিকে সদৃশ করা এড়ানো যায়
  • এটি এখনও তুলনামূলকভাবে সহজ (কেবল একটি চেক + রিটার্ন / নিক্ষেপ)
  • এটির জন্য আপনার প্রক্রিয়াটি পুনরায় শুরু করার প্রয়োজন হয় না

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


আপনার পরিস্থিতি দেওয়া, আমি আবেদনের সময় পরিস্থিতি পরিচালনা করব এবং হয় একত্রিত:

  • বাধা এবং অবহিত
  • এড়িয়ে যান এবং অবহিত করুন

আমি যদি সম্ভব হয় তবে কিছুটা অগ্রগতির একটি গ্যারান্টির গ্যারান্টি দিচ্ছি , বিশেষত যদি প্রসেসিংয়ে সময় লাগতে পারে তবে আমি এড়িয়ে যাব toward

যদি আপনাকে বাদ দেওয়া সারিগুলি পুনরায় প্রক্রিয়া করার প্রয়োজন না হয় তবে কেবল তাদের লগইন করা যথেষ্ট হবে এবং প্রক্রিয়া শেষে এড়ানো সারিগুলির সংখ্যা সহ একটি ইমেল প্রেরণ করা একটি উপযুক্ত বিজ্ঞপ্তি হবে।

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


-1

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

public static T Convert<T>(object obj)
        {
            if (obj == DBNull.Value)
            {
                return default(T);
            }

            return (T) obj;
        }

public static T Convert<T>(object obj, T defaultValue)
        {
            if (obj == DBNull.Value)
            {
                T t = defaultValue;
                return t;
            }

            return (T) obj;
        }

অথবা, আপনি যদি ক্রিয়া সম্পাদন করতে চান ...

 public static T Convert<T>(object obj, T defaultValue)
        {
            if (obj == DBNull.Value)
            {
                //Send an Alert, we might want pass in the name
                //of column or other details as well
                SendNullAlert();
                //Set it to default so we can keep processing
                T t = defaultValue;
                return t;
            }

            return (T) obj;
        }

এবং তারপরে ম্যাপিংয়ের ক্ষেত্রে, "নমুনা" টাইপের কোনও বিষয়টিতে আমরা যে কোনও কলামের নাল হ্যান্ডেল করব:

public class SampleMapper : MapperBase<Sample>
    {
        private const string Id = "Id";
        private const string Name = "Name";
        private const string DataValue = "DataValue";
        private const string Created = "Created";

        protected override Sample Map(IDataRecord record)
        {
            return new Sample(
                Utility.Convert<Int64>(record[Id]),
                Utility.Convert<String>(record[Name]),
                Utility.Convert<Int32>(record[DataValue]),
                Utility.Convert<DateTime>(record[Created])
                );
        }
    }

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


কেউ যদি সমান জাভা সংস্করণটি পোস্ট করতে চায় তবে তা দুর্দান্ত হবে ...
জন রায়নার

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

আহ, আমি এর ভিত্তিতে আমার উত্তর আপডেট করব।
জন রেয়নর

আপনার সম্পাদিত কোডটিতে এখন কোনও নাল মান (যেমন এটি সম্পূর্ণ জেনেরিক) এর জন্য একটি ডিফল্ট ক্রিয়া রয়েছে। এটি মূল প্রশ্নে আমার 2 য় বিকল্পের সাথে খুব মিল, অর্থাত্ নালার দিকে ছোঁড়ে এবং কোথাও এটি ধরা। তবে সেখানে যেমন বলা হয়েছে আমাকে কোন মানটি অনুপস্থিত তার ভিত্তিতে ক্রিয়াগুলি আলাদা করতে হবে।
jyot
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.