好事件日历/日程安排设计指南?

时间:2010-04-28 15:19:08

标签: calendar scheduling

在我正在设计的应用程序中,用户必须能够指定相当复杂的事件调度(连续时间块与每日时间块,异常日期/时间,重复模式等)。

有没有人知道网上有这么好的设计页面?例如,我对如何进行数据库审计跟踪的this page's描述给我留下了深刻的印象,并且会喜欢类似的东西。

当前的想法

  1. 我的数据库将包含以下表格:Events和ScheduleItems
    • 关系将是事件{1 - 0 .. *} ScheduleItems
    • 事件将包含以下列:eventId,schedulePattern
    • ScheduleItems将包含以下列:eventId,startDateTime,endDateTime
  2. 前端控件允许用户指定一般规则(每日/连续,包括/排除周末,开始/结束日期/时间等)。如果他们对现有控件不满意,他们可以选择显示并手动调整生成的“时间块”
  3. 保存活动时间表...
    • 如果只使用提供的控件(没有调整),我会将他们的选择保存为事件表中的模式(即“sd:2010-04-28; st:09:20:00; ed:2010-05” -12; et:17:20:00; r:2w [M-Th]; z:EST“etc。”
    • 如果用户手动调整生成的时间块,我会将每个单独的时间块保存在ScheduleItems表中,并为Events.schedulePattern提供特殊代码(“MANUAL”或其他内容)。
  4. 赞成

    我应该可以保存> 90%的事件直接通过模式字段,并且能够通过“暴力”ScheduleItems表处理任何其他角落情况。由于一些处理案例包括可能持续数月的事件(否则会导致大量的时间块),因此将它放在一行中是相当有吸引力的。

    缺点

    这是一个相当复杂的解决方案;任何其他需要此数据的系统都需要能够处理解析schedulePattern 以及知道何时获取ScheduleItem。

1 个答案:

答案 0 :(得分:1)

“schedulePattern”以成熟的方式使用Cron格式存储用户的日程安排是运行任务的好主意。

这种格式既简单又复杂。在关系数据库中,如果将Cron的每个“条目”分隔到具有合适索引的表的列中,将会有一些性能优势。

然而,努力是这种格式和用户界面之间的转换。并且应该最初记录用户输入的原始数据。

我会设计两种表,一种用于用户输入的原始数据,另一种用于计划运行任务。