我有一个有趣的问题,试图在数据库中表示复杂的时间表数据。作为指导,我需要能够表示 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 中的预定事件?但它不涵盖我想建模的重复规则类型的范围。