আপনি ডিবিতে একটি এনাম রাখবেন কেন?


69

আমার কিছু প্রশ্ন একটি সংখ্যা দেখা করেছি মত, এই , কিভাবে ডিবি মধ্যে enums সঞ্চয় করতে পরামর্শ চাওয়ার। তবে আমি ভাবছি আপনি কেন এমন করবেন। সুতরাং আসুন আমি বলি যে আমার কাছে Personএকটি genderক্ষেত্র এবং একটি Genderএনাম রয়েছে entity তারপরে, আমার ব্যক্তির টেবিলটিতে একটি কলাম লিঙ্গ রয়েছে।

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



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

4
@ জেবিকিং ... শুধু ফেসবুকের লিঙ্গ তালিকা দেখুন।


3
যদি আপনার গ্রাহকরা "বিভ্রান্তিকর টাম্বল্রাইটস" হন, তবে আপনি ব্যবসায়ের সাথে যুক্ত থাকতে চান, যদি আপনি একটি ডেটাবেস স্কিমা তৈরি করেন যা আপনাকে এমন কিছু তৈরি করতে দেয় যা তাদের চাহিদা পূরণ করে, কমপক্ষে।
স্টিভেন বার্নাপ

উত্তর:


74

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

আপনি ডাটাবেসে কি মান সংরক্ষণ করছেন?

তাই, আমি সংরক্ষণকারী যেতে পারে 'C', 'H', 'M', এবং 'L'ডাটাবেসের মধ্যে। বা 'HIGH'ইত্যাদি। এতে স্ট্রাইলি-টাইপ করা ডেটার সমস্যা রয়েছে । বৈধ মানগুলির একটি জ্ঞাত সেট রয়েছে এবং আপনি যদি সেই সেটটি ডাটাবেসে সংরক্ষণ না করে থাকেন তবে এটির সাথে কাজ করা কঠিন হতে পারে।

আপনি কোডে ডেটা সংরক্ষণ করছেন কেন?

কোডটিতে আপনি পেয়েছেন List<String> priorities = {'CRITICAL', 'HIGH', 'MEDIUM', 'LOW'};বা সেটির কোনও কিছু পেয়েছেন । এর অর্থ হল যে আপনি এই ডেটাটির বিভিন্ন ম্যাপিংগুলি যথাযথ বিন্যাসে পেয়েছেন (আপনি ডাটাবেসে সমস্ত ক্যাপ সন্নিবেশ করিয়েছেন তবে আপনি এটি হিসাবে প্রদর্শন করছেন Critical)। আপনার কোড এখন স্থানীয়করণ করাও কঠিন। আপনি ধারণায় থাকা স্ট্রিংয়ের সাথে ধারণার ডেটাবেস উপস্থাপনাকে আবদ্ধ করেছেন।

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

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

আপনার বস যখন অন্য অগ্রাধিকার চান তখন কী ঘটে?

তোমার বস আজ এসেছিল। একটি নতুন অগ্রাধিকার আছে - CEO। এখন আপনাকে যেতে হবে এবং সমস্ত কোড পরিবর্তন করতে হবে এবং একটি পুনর্নির্মাণ এবং পুনর্নির্মাণ করতে হবে।

একটি 'এনাম-ইন-দ্য-টেবিল' পদ্ধতির সাথে, আপনি নতুন অগ্রাধিকার পেতে এনাম তালিকাটি আপডেট করেন। তালিকাটি প্রাপ্ত সমস্ত কোড এটি ডাটাবেস থেকে টেনে তোলে।

ডেটা খুব কমই একা দাঁড়িয়ে থাকে

অগ্রাধিকার সহ, অন্যান্য টেবিলে ডেটা কীগুলিতে ওয়ার্কফ্লো সম্পর্কে তথ্য থাকতে পারে, বা কে এই অগ্রাধিকারটি সেট করতে পারে বা কী নন।

কিছুটা ক্ষেত্রে প্রশ্নে উল্লিখিত লিঙ্গটিতে ফিরে যাওয়া: লিঙ্গটির ব্যবহারের সর্বনামগুলির একটি লিঙ্ক রয়েছে: he/his/himএবং she/hers/her... এবং আপনি কোডটিতে নিজেরাই কঠোর কোডিং এড়াতে চান। এবং তারপরে আপনার বস আসবেন এবং আপনাকে 'OTHER'লিঙ্গটি যুক্ত করতে হবে (এটিকে সহজ রাখতে) এবং আপনার এই লিঙ্গটির সাথে সম্পর্কিত হওয়া দরকার they/their/them... এবং আপনার বস ফেসবুকের কী আছে এবং ... ভাল, হ্যাঁ তা দেখেন।

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

অন্যান্য ডেটাস্টোরের কী হবে?

আপনি এটি কোথায় সঞ্চয় করেন তা বিবেচনা না করে একই নীতিটি বিদ্যমান।

  • আপনার কাছে একটি ফাইল থাকতে পারে priorities.prop, এটিতে অগ্রাধিকারের তালিকা রয়েছে। আপনি কোনও সম্পত্তি ফাইল থেকে এই তালিকাটি পড়েছেন।
  • আপনার কাছে একটি ডকুমেন্ট স্টোর ডাটাবেস থাকতে পারে (যেমন কাউচডিবি ) যাতে প্রবেশের জন্য enums(এবং তারপরে জাভাস্ক্রিপ্টে একটি বৈধকরণ ফাংশন লিখুন ):

    {
       "_id": "c18b0756c3c08d8fceb5bcddd60006f4",
       "_rev": "1-c89f76e36b740e9b899a4bffab44e1c2",
       "priorities": [ "critical", "high", "medium", "low" ],
       "severities": [ "blocker", "bad", "annoying", "cosmetic" ]
    }
    
  • আপনার কাছে কিছুটা স্কিমা সহ একটি এক্সএমএল ফাইল থাকতে পারে:

    <xs:element name="priority" type="priorityType"/>
    
    <xs:simpleType name="priorityType">
      <xs:restriction base="xs:string">
        <xs:enumeration value="critical"/>
        <xs:enumeration value="high"/>
        <xs:enumeration value="medium"/>
        <xs:enumeration value="low"/>
      </xs:restriction>
    </xs:simpleType>
    

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

টেকওয়ে

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

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

এটি পরীক্ষামূলক অ্যাপ্লিকেশনগুলিকে সহজ করে তোলে কারণ CEOঅগ্রাধিকার যুক্ত হওয়ার সময় আপনাকে পুরো অ্যাপ্লিকেশনটির পুনরায় পরীক্ষা করতে হবে না - কারণ আপনার কাছে এমন কোনও কোড নেই যা অগ্রাধিকারের আসল মান সম্পর্কে চিন্তা করে।

একে অপরের থেকে স্বাধীনভাবে কোড এবং ডেটা সম্পর্কে যুক্তিযুক্ত হতে সক্ষম হওয়া রক্ষণাবেক্ষণ করার সময় বাগগুলি খুঁজে পেতে এবং এটি ঠিক করা সহজ করে।


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

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

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

2
Enum এর Redmine ব্যবহার @Voo হিসাবে একই Bugzilla "সবচেয়ে গুরুত্বপূর্ণ টেবিল ব্যবস্থার বাগ সব ধারণ করে। এটা তীব্রতা এবং অগ্রাধিকার মত enum মূল্যবোধের সব সহ বিভিন্ন বাগ বৈশিষ্ট্য গঠিত।" - এটি কোনও নিখরচায় পাঠ্য ক্ষেত্র নয়, এটি একটি মূল্য যা এটি পরিচিত এবং গণনাযোগ্য সেটগুলির মধ্যে একটি। এটি একটি সংকলন সময় এনুম নয়, তবে এটি এখনও প্রশংসিত। মান্টিসও দেখুন ।

1
সুতরাং নিশ্চিত করতে - আপনার বক্তব্যটি কি মানুষ কখনই এনাম ব্যবহার করা উচিত নয়? পরিষ্কার ছিল না।
নিকো

18

কোয়েরিটি পড়ার সময় এর মধ্যে কোনটি ভুল হওয়ার সম্ভাবনা বেশি বলে মনে করেন?

select * 
from Person 
where Gender = 1

অথবা

select * 
from Person join Gender on Person.Gender = Gender.GenderId
where Gender.Label = "Female" 

লোকেরা এসকিউএল এ এনাম টেবিল তৈরি করে কারণ তারা পরেরটি আরও পঠনযোগ্য বলে মনে করে - এসকিউএল লেখার এবং রক্ষণাবেক্ষণের ক্ষেত্রে কম ত্রুটি ঘটায়।

আপনি সরাসরি লিঙ্গকে একটি স্ট্রিং তৈরি করতে পারেন Person, তবে তারপরে আপনাকে কেসটি প্রয়োগ করে প্রয়োগ করতে হবে। আপনার ডিবি জিনিসগুলি অনুকূলকরণের ক্ষেত্রে কতটা বিস্ময়কর তার উপর নির্ভর করে স্ট্রিং এবং পূর্ণসংখ্যার মধ্যে পার্থক্যের কারণে আপনি টেবিলের জন্য স্টোরেজ হিট এবং ক্যোয়ারির সময় বাড়িয়ে তুলতে পারেন।


5
কিন্তু তারপরে আমরা টেবিলগুলিতে যোগদান করছি। আমার সত্তায় যদি দুটি এনাম থাকে তবে আমি কেবল একটি সাধারণ প্রশ্নের জন্য তিনটি টেবিলের সাথে যোগ দেব।
ব্যবহারকারী3748908

11
@ ব্যবহারকারী3748908 - তাই? ডিবি-তে কী ভাল তা যোগ দেয় এবং বিকল্পগুলি আরও খারাপ - কমপক্ষে যারা এই পথটি বেছে নিয়েছেন তাদের চোখে।
টেলাস্টিন

8
@ ব্যবহারকারী 374৪৮৯০৮: কেবলমাত্র ডাটাবেসই যুক্ত হতে পারে না, তারা ধারাবাহিকতা প্রয়োগের ক্ষেত্রেও খুব ভাল good ধারাবাহিকতা প্রয়োগ করা কার্যকরভাবে কাজ করে, আপনি যখন অন্য টেবিলে সনাক্তকরণের সারিতে এক টেবিলের কলামটি নির্দেশ করতে পারেন এবং বলতে পারেন যে "এই কলামটির মান সেই টেবিলের শনাক্তকারীদের মধ্যে একটি হতে হবে।"
blrfl

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

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

10

আমি বিশ্বাস করতে পারি না মানুষ এখনও এটি উল্লেখ করেনি।

বিদেশী কী

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


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

6

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

এরপরে আপনাকে আপনার স্টোরেজ পদ্ধতিতে এনাম মানগুলি প্রেরণ করতে হবে:

create stored procedure InsertPerson @name varchar, @gender int
    insert into tblPeople (name, gender)
    values (@name, @gender)

তবে আপনি যদি এই মানগুলি একটি ডাটাবেস সারণীতে রাখেন তবে আপনি কীভাবে তা ভেবে দেখুন:

create stored procedure InsertPerson @name varchar, @genderName varchar
    insert into tblPeople (name, gender)
    select @name, fkGender
    from tblGender
    where genderName = @genderName --I hope these are the same

নিশ্চিত রিলেশনাল ডাটাবেসগুলি মাথায় রেখেই তৈরি করা হয়েছে তবে কোন কোয়েরিটি পড়া সহজ?


এখানে আরও একটি উদাহরণ ক্যোয়ারী:

create stored procedure SpGetGenderCounts
    select count(*) as count, gender
    from tblPeople
    group by gender

এর সাথে এর তুলনা করুন:

create stored procedure SpGetGenderCounts
    select count(*) as count, genderName
    from tblPeople
    inner join tblGender on pkGender = fkGender
    group by genderName --assuming no two genders have the same name

এখানে আরও একটি উদাহরণ ক্যোয়ারী এখানে রয়েছে:

create stored procedure GetAllPeople
    select name, gender
    from tblPeople

নোট করুন যে এই উদাহরণে, আপনাকে আপনার ফলাফলগুলিতে লিঙ্গ সেলটি একটি এনট থেকে একটি এনামে রূপান্তর করতে হবে। এই রূপান্তরগুলি তবে সহজ। এর সাথে এর তুলনা করুন:

create stored procedure GetAllPeople
    select name, genderName
    from tblPeople
    inner join tblGender on pkGender = fkGender

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


1
যদিও এটি লিঙ্গ না থাকলে কি হবে। আমি মনে করি আমরা ক্ষেত্র হওয়ার কারণে লিঙ্গকে খুব ঝুলিয়ে রাখছি । যদি ওপি বলেছিল "তাহলে চলুন আমি বলতে পারি যে আমার কাছে একটি অগ্রাধিকার ক্ষেত্রের সাথে একটি সত্ত্বা বাগ আছে" - আপনার উত্তরটি কি পরিবর্তন হবে?

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

1

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


1

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

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

আপনার যদি কোড (ক্লিনার কোড এবং সংকলনের সময় পরীক্ষা করার জন্য) পাশাপাশি ডেটাবেসে একটি টেবিলের সাথে এনাম সংজ্ঞায়িত করা থাকে তবে আমি দুটি সিঙ্কে রয়েছে কিনা তা যাচাই করতে ইউনিট পরীক্ষা যুক্ত করার পরামর্শ দেব।


1

কোডে ব্যবসায়িক লজিক চালনা করতে যখন আপনার একটি কোড গণনা করা হয় তখন উপরে / নীচে বিভিন্ন কারণে ডিবিতে ডেটা উপস্থাপনের জন্য আপনার একটি টেবিল তৈরি করা উচিত। আপনার ডিবি মান কোড মানগুলির সাথে সুসংগত থাকে তা নিশ্চিত করার জন্য এখানে কয়েকটি টিপস দেওয়া হয়েছে:

  1. টেবিলে আইডি ক্ষেত্রটি কোনও পরিচয় কলাম তৈরি করবেন না। ক্ষেত্র হিসাবে আইডি এবং বিবরণ অন্তর্ভুক্ত করুন।

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

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

  4. উত্পাদনের তৈরি এসকিউএল স্ক্রিপ্টগুলি সরবরাহ করে যা একই কাজ করে তবে ডিবির ভিতরে থেকে। যদি সঠিকভাবে তৈরি করা হয় তবে তারা পরিবেশের স্থানান্তরকেও সহায়তা করবে।


0

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

সাধারণত, টাইপ টেবিলটি কোডটিতে এনাম হিসাবে নকল হবে না। আপনি ক্যাশে হওয়া তালিকায় টাইপ টেবিলটি লোড করতে পারেন।

Class GenderList

   Public Shared Property UnfilteredList
   Public Shared Property Male = GetItem("M")
   Public Shared Property Female = GetItem("F")

End Class

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

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