我目前正在设计一个数据库:
1)有一个任务列表,例如:
Clean the floor.
Wipe the sink.
Take swabs.
2)有一个区域列表,例如:
Kitchen.
Servery.
3)针对某个区域安排任务,可以是“每小时”,“每日”,“每周”,“每月”或“每年”。我将这个AreaTask(区域,任务,频率)称为: -
Kitchen, Clean the floor, Daily
4)AreaTask将在一个工作日开始时(如果是每日,每周,每月或每年),或者在小时开始时根据时间表到期。例如,如果“清理地板”在周三安排为“每周”,那么在每个星期三开始时它将成为截止日期,并且在完成之前保持到期(工作,签名等) - 或者如果它超过一定时间,它将变为OverDue。
5)当针对AreaTask完成工作时,它会记录在数据库中(区域,任务,用户[完成工作],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。我倾向于使用Views来从不同的角度看数据。
感谢。
也许PS也许CRON工作也会将ScheduledTask标记为OverDue而不是确定。我想问题是关于这些正式状态是应该存储在数据库中还是确定的。我可以存储它们的唯一方法是运行某种CRON作业(这很好,只要我知道没有更好的方法)。 编辑:反对推导国家的一个论点是时间表可能会改变 - 但是我确实在数据库中保留了历史记录,所以我仍然可以得出 - 但我想的越多,我就越倾向于使用CRON根据时间表安排任务的工作。答案 0 :(得分:0)
看看这个模型:
每次启动任务时,都会在WORK表中插入一个新行。完成后,设置WORK.COMPLETED_AT。
您可以找到今天尚未完成的日常任务(及其区域):
SELECT *
FROM SCHEDULE
WHERE
FREQUENCY = 'daily'
AND NOT EXIST (
SELECT * FROM WORK
WHERE
SCHEDULE.AREA_ID = WORK.AREA_ID
AND SCHEDULE.TASK_ID = WORK.TASK_ID
AND DAY(COMPLETED_AT) = TODAY
)
将DAY和TODAY替换为您的数据库特有的任何内容,并且您可能希望使用整数而不是字符串来进行FREQUENCY。
可以为其他频率设计类似的查询。
手动计划的任务可以通过类似于SCHEDULE的表建模,但FREQUENCY由显式时间替换。