我目前正在设计一个数据库:
1) 有一个任务列表,例如:
Clean the floor.
Wipe the sink.
Take swabs.
2) 有一个区域列表,例如:
Kitchen.
Servery.
3) 针对一个区域安排任务,可以是“每小时”、“每天”、“每周”、“每月”或“每年”。我将称之为 AreaTask(区域、任务、频率):-
Kitchen, Clean the floor, Daily
4) AreaTask 将在工作日开始时到期(如果是每日、每周、每月或每年),或者如果是每小时,则在小时开始时到期 - 根据时间表。例如,如果“清洁地板”安排在星期三“每周”,那么在每个星期三开始时,它将变为到期,并在当天保持到期,直到完成(工作、签字等) - 或超过一定时间就会变成OverDue。
5) 当针对 AreaTask 完成工作时,它会记录在数据库中(区域、任务、用户 [工作人员]、日期时间 [工作完成]):-
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) Kitchen, Clean the floor, 2012-05-23 06:00:00, Joe Bloggs, 2012-05-23 11:30:00
我希望这有点道理。
PS这是基于RDBMS的数据库-不是OO。我倾向于使用视图从不同的角度查看数据。
谢谢。
PS也许CRON作业也会将ScheduledTask标记为OverDue而不是确定它。我想问题是关于这些正式状态是否应该存储在数据库中,或者确定。我可以存储它们的唯一方法是运行某种 CRON 作业(这很好,只要我知道没有更好的方法)。
编辑:反对派生状态的一个论点是时间表可能会改变 - 但是我确实将历史记录保存在数据库中,所以我仍然可以派生 - 但我想得越多,我就越倾向于使用 CRON 作业来安排基于计划的任务。