4

存储重复时间窗口的首选方式是什么?
例如。如果我有一个日历系统,我需要能够容纳每天、每周或每月重复发生的事件,那么哪种时间管理系统最好?

这在数据库中如何最好地表示?

更多详细信息
其具体目标是提供多组开放时间窗口。一旦我们有了这些时间窗口,代码就需要测试到达系统的消息是否落在其中一个时间窗口内。

4

2 回答 2

1

我将创建一个 RecurrenceType 表,该表将保存您的日历系统支持的每种重复类型的记录。CalendarEvents 表中的每个事件都会引用 RecurrenceType 表中的 ID。

然后,我将在代码中有一个 RecurrenceRules 对象,该对象将保存计算何时为下一个日期提供当前日期或开始日期或检索下一个 N 日期作为数组的业务逻辑。

大多数重复逻辑可能必须根据基于 RecurrenceType 表的 ID 的枚举值进行编码。如果你可以让它全部由数据驱动,我会感到惊讶,除非它是一个非常简单的日历系统。

希望有帮助。这听起来像是一个有趣的项目。

于 2008-10-11T06:45:37.837 回答
1

这延迟了很长时间,但经过多次测试和许多心痛,我们决定采用某种方案来完成这项工作。为了我们系统的需要,我们只需要每周重复一次(如果有的话)。最终产品将被设计成这样。

这是数据库模式

id : int(10)
window_name : varchar(100)
start_date : datetime
end_date : datetime
start_time : time
duration : int(10)
timezone: varchar(100)
monday : tinyint(1)
tuesday : tinyint(1)
...
sunday : tinyint(1)
  1. 每个时间“窗口”都有一个设定的开始日期、结束日期、开始时间和持续时间。
  2. 该窗口将在开始日期和开始时间打开并运行“持续时间”秒
  3. 该窗口仅在一周中的指定日期打开

这是唯一一个允许窗户每周打开和关闭的系统,并且窗户可以跨越到第二天早上。我确信有更复杂的系统可以执行重复窗口,但我们正在寻找灵活且快速的系统,并且不需要每月重复事件或每年事件。

于 2009-06-11T22:10:26.863 回答