10

我有一个有趣的问题,试图在数据库中表示复杂的时间表数据。作为指导,我需要能够表示 iCalendar -- ics-- 格式可以表示的全部内容,但在数据库中。我实际上并没有实现任何与ics.

我需要允许基于每天多次、一周中的几天、一个月中的一周、月、年或这些的某种组合来表示单个事件或重复事件。例如,每年 11 月的第三个星期四,或每年 12 月 25 日,或从 11 月 2 日开始每两周持续到次年 9 月 8 日。

我不关心插入效率,但查询效率至关重要。我最常做的操作是提供单个日期/时间或日期/时间范围,并尝试确定定义的时间表是否与日期/时间范围的任何部分匹配。其他操作可能会更慢。例如,给定 2010 年 1 月 15 日上午 10:00 到 2010 年 1 月 15 日上午 11:00,查找至少与该时间部分匹配的所有时间表。(即涵盖 10:30 - 11:00 的时间表仍然匹配。)

有什么建议么?我查看了如何表示 RDBMS 中的预定事件?但它不涵盖我想建模的重复规则类型的范围。

4

3 回答 3

4

最后,这篇文章最有帮助:

iCal“字段”列表(用于基于 iCal 标准的数据库模式)

我们决定完全遵循 iCal 模型,因为编写该标准的人对问题领域有很好的感觉。

于 2010-06-18T23:34:12.653 回答
1

我做类似的事情的方式是有两张桌子。如果事件没有重复模式,则只需存储日期、开始时间和结束时间。您的查询检查您搜索的时间是否大于任何条目的开始时间并且小于或等于同一事件的结束时间。

对于重复事件,我不太熟悉 iCalendar 如何存储重复事件,但是如果您按星期几存储每个事件(如果一个事件每周重复超过一天,您可能必须为单个事件设置多行) ,然后按照与上表几乎相同的方式进行搜索。对于像一周的第三个星期二这样的陌生人复发,您可以有一个额外的列来描述具体情况。如果你能告诉我更多关于 ics 如何代表这种复发,我可能会给你一个更好的答案。

我希望这会有所帮助。我现在没有太多时间。如果你想讨论这个,你可以稍后联系我。我目前在密苏里州,所以我下周的空闲时间会很不稳定。

于 2010-06-13T14:43:37.150 回答
-1

这可能是一个简单的解决方案,但是添加一个定义事件重复发生的列(即每x周、每年、每周等)并将其用作结果标准会有什么缺点?

于 2010-06-13T18:44:08.367 回答