私は現在、次のようなデータベースを設計しています。
1)次のようなタスクのリストがあります。
Clean the floor.
Wipe the sink.
Take swabs.
2)次のようなエリアのリストがあります。
Kitchen.
Servery.
3)タスクは、「毎時」、「毎日」、「毎週」、「毎月」、または「毎年」のいずれかとして、エリアに対してスケジュールされます。これをAreaTask(Area、Task、Frequency)と呼びます:-
Kitchen, Clean the floor, Daily
4)AreaTaskは、スケジュールに基づいて、営業日の開始時(日次、週次、月次、または年次の場合)、または時間単位の場合は時間の開始時に期限が切れます。たとえば、「床の掃除」が水曜日に「毎週」にスケジュールされている場合、毎週水曜日の開始時に期限になり、それが完了するまで(作業済み、サインオフなど)その日は期限のままになります-または一定時間を超えると延滞となります。
5)AreaTaskに対して作業が行われると、データベースに記録されます(Area、Task、User [作業を行った人]、DateTime [作業が行われた]):-
Kitchen, Clean the floor, Joe Bloggs, 2012-05-23 10:50:00
これが私が決定しようとしていることです:
すべてのデータが存在するため、クエリだけでいつでもAreaTaskのさまざまな状態を判断できます(つまり、AreaTaskが水曜日に期限になると判断でき、作業がなかった場合は期限が過ぎたと判断できます)設定された時間の前にそのAreaTaskに対して実行されます)。ただし、代わりに、おそらくCRONジョブまたはその他の手段によって入力されるAreaTaskDueテーブルが必要かどうか疑問に思っています。
このようにして、データベースにデータをクエリして保存するための正式なエントリがあります。たとえば、次のようになります。
ScheduledTask(Area、Task、ScheduledDateTime)キッチン、床を掃除、2012-05-23 06:00:00
これにより、必要に応じてタスクを手動でスケジュールすることもできます。
次に、ScheduledTaskに対して作業が行われると、ScheduledTask自体に対してログに記録できます。
ScheduledTaskWork(Area、Task、ScheduledDateTime、User、DateTime)キッチン、床を掃除、2012-05-23 06:00:00、Joe Bloggs、2012-05-23 11:30:00
それが理にかなっていることを願っています。
PSこれはRDBMSベースのデータベース用であり、OOではありません。私はビューを使用して、さまざまな視点からデータを表示する傾向があります。
ありがとう。
PSもおそらく、CRONジョブはScheduledTaskをそれを決定するのではなくOverDueとしてマークします。問題は、これらの正式な状態をデータベースに保存するか、決定するかということだと思います。それらを保存できる唯一の方法は、ある種のCRONジョブを実行することです(これは、より良い方法がないことがわかっている限り、問題ありません)。
編集:状態を導出することに反対する1つの議論は、スケジュールが変更される可能性があるということです-しかし、私はデータベースに履歴を保持しているので、それでも導出できます-しかし、それについて考えれば考えるほど、CRONジョブを使用してスケジュールすることに傾倒していますスケジュールに基づくタスク。