রেকর্ড স্ট্যাটাসগুলি কীভাবে সংরক্ষণ করবেন (যেমন মুলতুবি, সম্পূর্ণ, খসড়া, বাতিল…)


18

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

আমার একটি সাধারণ ব্লগ অ্যাপ্লিকেশন রয়েছে এবং প্রতিটি পোস্টের একটি স্থিতি রয়েছে: প্রকাশিত, খসড়া বা মুলতুবি।

আমি এটি যেভাবে দেখছি তাতে ডেটাবেজে মডেল করার 2 উপায় রয়েছে।

  1. পোস্ট সারণীতে একটি পাঠ্য ক্ষেত্র রয়েছে যা স্থিতি পাঠ্যকে অন্তর্ভুক্ত করে।
  2. পোস্ট টেবিলটির একটি স্ট্যাটাস ফিল্ড রয়েছে যা পোস্টস্ট্যাটাস টেবিলের একটি রেকর্ডের আইডি ধারণ করে

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

প্রত্যেকের সুবিধা / অসুবিধাগুলি কি কেউ ব্যাখ্যা করতে পারেন?

চিয়ার্স!

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


1
এছাড়াও দেখুন dba.stackexchange.com/q/11631/630
gbn

"যে কোনও সময়" বলতে কী বোঝ? এর অর্থ কি ব্যবহারকারীর ক্রিয়াকলাপের অংশ হিসাবে, বা সফ্টওয়্যার রিলিজ চক্রের অংশ হিসাবে?
কেভিন ক্লিন

উভয় ক্ষেত্রেই এখানে বর্ণিত যে কোনও পন্থা সবচেয়ে ভাল ব্যবহৃত। সুতরাং যদি ব্যবহারকারীরা নতুন স্ট্যাটাসগুলি যুক্ত করতে সক্ষম হন, বা যদি নতুন কোনও প্রকল্পের পরবর্তী সময়ে যুক্ত হয়
Veganista

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

ব্যবহারকারীরা যদি নতুন স্ট্যাটাস যুক্ত করতে সক্ষম হন তবে এটি সম্পূর্ণরূপে অন্য জিনিস। আপনি সম্ভবত স্থিতি সহ তৈরি ব্যবহারকারী ইত্যাদি রেকর্ড করতে চান এবং অবশ্যই অন্য একটি টেবিলের প্রয়োজন হবে।
কেভিন cline

উত্তর:


14

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

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

হ্যাঁ, আপনাকে স্ট্যাটাসটি বিভিন্ন ব্যবহারকারীর কাছে আলাদাভাবে উপস্থাপন করতে হতে পারে। এটি একটি উপস্থাপনা সমস্যা, প্রেজেন্টেশন স্তরটিতে সমাধান করা, স্থির স্তর নয় layer


1
+1, ডিবিতে স্ট্যাটাসগুলির তালিকা রাখার একটি নির্দিষ্ট প্রয়োজন ব্যতীত, এটি করা সহজভাবে এটি সহজতম, জটিলতম উপায় way
গ্র্যান্ডমাস্টারবি

2
এটি ঠিক আছে, যদি না আপনি স্থিতি আর্কিটেকচার পরিবর্তন করতে বা মিউটেশনের তারিখগুলি সংরক্ষণ করা শুরু করেন
লাস্টটিবুনাল

10

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

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

select * from myrecords where status < Status.Complete;

কিছু বোকা আইডিকেও হার্ড করতে পারে।
মরনস

আইডিগুলির আরেকটি সুবিধা হ'ল আপনাকে স্থানীয়করণ সরবরাহ করতে হবে। রিসোর্স স্ট্রিং এবং ডিসপ্লেতে আপনার আইডি ব্যবহার করতে পারেন। কঠোর কোডেড স্ট্রিং সহ এটি সম্ভব নয়
আর্মিটেজ

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

1
@ আরমিটেজ: স্ট্রিংগুলি ব্যবহার করে একটি লুক্কুট করা সম্পূর্ণ সম্ভব। রিসোর্সের নামগুলি স্ট্রিং রয়েছে:status.draft=Draught
কেভিন cline

Veganista: অবশ্যই, তুলনা তুলনায় / বৃহত্তর তুলনায় অসুবিধা হতে পারে, তবে আমি বড় এবং জটিল সিস্টেমগুলি দেখেছি যা এটি করে এবং বাস করে।
ব্যবহারকারী 281377

4

রিলেশনাল ডাটাবেসের তিনটি নিয়ম:

  1. নিয়মমাফিক করা
  2. নিয়মমাফিক করা
  3. নিয়মমাফিক করা

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

পোস্টের স্থিতির নাম পরিবর্তন করতে পারে, পোস্টের স্থিতি সম্পর্কিত আরও তথ্য সারণীতে যেতে পারে, আপনি স্বাভাবিক রাখলে সবকিছুই কাজ করে

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


আপনি এখানে যে কারণগুলি বলেছেন তা হ'ল কারণগুলি আমার স্টজগুলি সংরক্ষণ করার জন্য আমি অন্য টেবিলটি ব্যবহার করছি। আমি এই প্রশ্নটি জিজ্ঞাসা করার মূল কারণটি হ'ল কখনও কখনও সরল পাঠ্য ক্ষেত্রটি ব্যবহার করা ভাল কিনা তা।
veganista

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

চোখের আড়াল করে,
জিইউইডিগুলিতে

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

সম্পূর্ণ টেবিল স্ক্যান বনাম কলামের প্রকারের ভুল তথ্যের কারণে বঞ্চিত।
igorrs

3

হ্যাঁ, আপনার পোস্টস্ট্যাটাস টেবিল থাকা, বিকল্প 2 দিয়ে যেতে হবে।

অন্যান্য উত্তরে উল্লিখিত সমস্ত সুবিধা বাদে।

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


1

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

আপনার স্ট্যাটাস চেঞ্জ সত্তার সাথে বাড়তি যোগ দেওয়া দরকার, তবে অতিরিক্ত তথ্য যুক্ত করার সম্ভাবনা আপনি জিতে নিতে পারেন, যেমন পরিবর্তনটি সম্পাদনকারী অভিনেতা, পরিবর্তনটি কেন ঘটেছে তার সম্ভাব্য মন্তব্য এবং স্ট্যাটাস চেঞ্জটি সম্পাদিত হওয়ার তারিখ এবং সম্ভবত এটি কার্যকর হয়।


0

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

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

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


আপনি যদি পারফরম্যান্স নিয়ে চিন্তিত না হন তবে আপনি সম্ভবত স্কেল্যাবিলিটি ত্যাগ করছেন। কম্পিউটারের পক্ষে যাদুকরী পরিস্থিতি এড়ানো অসম্ভব: 0 এবং 1 স্বতন্ত্রভাবে যাদুকর।
সানকাট 2000

0

ডাটাবেস নকশা উদ্দেশ্য উপর নির্ভর করে।

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


-1

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


-2

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


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