পুনরাবৃত্তিমূলক ক্যালেন্ডার কার্যগুলি কীভাবে ডাটাবেসে সংরক্ষণ করা উচিত?


14

এটি মাইক্রো-ম্যানেজমেন্টের জন্য একটি ছোট ব্যক্তিগত প্রকল্পের জন্য। মূলত, আমি কোনও এসকিউএল 3 ডাটাবেজে টাস্কগুলি সঞ্চয় করি যা দেখতে দেখতে এটি:

    id INTEGER PRIMARY KEY AUTOINCREMENT
    label TEXT
    deadline INTEGER

সুতরাং প্রতিটি কাজের একটি নির্ধারিত তারিখ (সময়সীমা) থাকে যা ইউনিক্স টাইম স্ট্যাম্প হিসাবে সঞ্চিত থাকে। এতদূর ভাল, আমি "আগামীকাল: দাদী দর্শন করুন" এর মতো এন্ট্রিগুলি করতে পারি এবং "ভিজিট ঠাকুরমা" লেবেল হিসাবে এবং কালকে সময়সীমার জন্য ইউনিক্স সময় রূপান্তরিত করে একটি নতুন সারি তৈরি হয় ।

এখন আমি নতুন ধরণের টাস্কগুলিতে প্রবেশ করতে চাই: রুটিন - একটি কাজের সময় পুনরায় "দৈনন্দিন: পরিষ্কার রান্নাঘর" এর মতো পুনরাবৃত্তি tasks এই জাতীয় কাজগুলি কীভাবে সংরক্ষণ বা মডেল করা যায়?

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

এটি করার একটি সহজ উপায় আছে? আমি কি কিছু স্পষ্ট ডাটাবেস ডিজাইন নীতি অনুপস্থিত?


3
হ্যাঁ. আরও একটি কাজের শিডিয়ুলার আবিষ্কারের পরিবর্তে একটি উপযুক্ত শিডিয়ুলার সরঞ্জাম ব্যবহার করুন। এসওপিএর বিক্ষোভ শেষ হওয়ার পরে, এন.ইউইকিপিডিয়া . org / উইকি / ওপেন_সোর্স_জব_সচুলার পড়ুন । এটি ইতিমধ্যে অনেক বার সমাধান করা হয়েছে।
এস .লট

ধন্যবাদ লট! হ্যাঁ আমি সন্দেহ করি যে এর জন্য একটি মার্জিত সমাধান আছে! আমি এসওপিএ শেষের জন্য অপেক্ষা করব বা অন্য উইকিপিডিয়া দেশগুলিতে কোনও অনুবাদ আছে কিনা তা যাচাই করবো: সম্পাদনা: ive সবেমাত্র লক্ষ্য করেছেন যে এইচটিএমএল উত্স এখনও উইকিপিডিয়া মার্কিন যুক্তরাষ্ট্রে উপলব্ধ, ব্ল্যাক আউট স্ক্রিনটি সিএসএস ট্রিকের মতো, আমি আমার একটি ছোট গ্রিসমোনকি স্ক্রিপ্টের জন্য উপায় :)
ッ ভেসপা

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


@ রুট 45 দুর্দান্ত, আমি আসলে কমান্ড লাইন থেকে লিংক ব্যবহার করি, আরও সহজ :)
ফ্রেঞ্চোইস ッ ভেসপা

উত্তর:


7

আপনি পুনঃক্রিকারের জন্য পৃথক টেবিল তৈরি করতে পারেন। তবে সত্যই আমি জটগুলি টাইপ ফিল্ডের সাথে একই টেবিলে রেখে দেব।

এটার মতো কিছু:

ID - Int Pk

TaskDescription - TEXT

Type - Text - (Re-Occurring, or Single Occurrence) 

Due- TimeStamp - for Single Occurrence is the Date time

LastTimeCompleted - Time Stamp

ReoccurringUnit - Text - "Days", Weeks, Month, Ext

ReoccurringEveryX - Int - Reoccurring interval 

আকর্ষণীয়, আমি আসলে এটির অনুরূপ একটি সম্ভাব্য সমাধান অন্বেষণ করছি, আমি এখনও আমার এসকিউএল ফাংশনগুলি নিয়ে কাজ করছি, আমি সফল হলে পোস্ট করব
ফ্রান্সোইস ッ ভেস্পা

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

2

এস.লোট, মার্টিন ফাউলারের মন্তব্য ছাড়াও - ক্যালেন্ডারগুলির জন্য পুনরাবৃত্তি ইভেন্টগুলি পিডিএফ আপনাকে সহায়তা করতে পারে (আমি এটি কিছুটা কঠিন বলে মনে করি)।

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


1

আমার দৃষ্টিতে দুটি বিকল্প রয়েছে:

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

এটি আমি এটিও দেখতে পাচ্ছি
ফ্রেঞ্চোইস ッ ভেসপা ت

1

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

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

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

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

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

যুক্তি হ'ল কাজ সম্পন্ন হওয়া এবং তৈরি করা কার্যগুলির মধ্যে পার্থক্যটি যদি কাজটি সবসময় সম্পন্ন হয় তবে পুনরাবৃত্তি সময়কালের হওয়া উচিত। সুতরাং পুনরাবৃত্ত সময়ের দ্বারা দিনের পার্থক্যকে ভাগ করে নেওয়া আপনাকে কার্যকরীটি কত দিন ধরে মুলতুবি রয়েছে তা ইঙ্গিত দেয়।

এটি নির্দেশ করার জন্য কারিমের জন্য ধন্যবাদ

আইএমএইচও, টাস্ক অ্যাপ্লিকেশনগুলি বড় আকারের মানুষের জন্য তৈরি করা কঠিন।


গঠনমূলক উত্তরের জন্য ধন্যবাদ! এটি মজাদার একটি প্রকল্প এবং আমি এটিকে যথাসম্ভব নমনীয় করে তুলতে চাই, যেমন 'বুধবার বাদে প্রতি 4 দিন অন্তর পুনরাবৃত্তি করা উচিত'
ফ্রেঞ্চোইস ッ ভেসপা

1

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

CREATE TABLE events(start TIMESTAMP, end TIMESTAMP, name TEXT, user_id LONG,
                    recurrence_id LONG, ...);
CREATE TABLE recurrences(id LONG, start TIMESTAMP, end TIMESTAMP, name TEXT, 
                         frequency ...);

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

এই পরামর্শটি নির্লজ্জভাবে টম কাইটের একটি বই থেকে পুনরাবৃত্তি করা হয়েছে।


1

পুনরাবৃত্তি করা কার্যগুলির একটি শুরুর তারিখ এবং শেষের তারিখ হওয়া উচিত। একক তারিখের কাজের জন্য তারা একই তারিখ হবে।

কিছু ধরণের "তারিখ" সারণী তৈরি করুন যা আপনার প্রয়োজন হিসাবে ভবিষ্যতের যতটুকু আপনার প্রয়োজন হিসাবে প্রাসঙ্গিক বলে মনে করেন প্রতিদিনের জন্য একটি রেকর্ড রয়েছে: উদাহরণস্বরূপ 12/31/2100 এবং আপনার ফর্ম্যাটে রূপান্তর করুন।

একটি ক্যোয়ারির মতো দেখতে হতে পারে:

Select 
  t.id
  , t.label
  , d.UnixDate
from Tasks as t
inner join Dates as d
on d.UnixDate >= t.StartDate
  and d.UnixDate <= t.EndDate
where t.id = [ID Param]

0

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


ইহা আকর্ষণীয়. কিছু ডিজাইনের সীমা ছিল, অর্থাত্ ক্যোয়ারীগুলি করা যায় নি (যেমন 'প্রতি সপ্তাহে পুনরাবৃত্তি করা উচিত')?
ফ্রান্সোইস ッ ভেসপা

0

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

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

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