0

我目前正在设计一个数据库:

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 作业来安排基于计划的任务。

4

1 回答 1

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 被显式时间替换。

于 2012-05-30T18:15:17.930 回答