生成事件的所有可能的重复(理论上)会用用户很可能永远不会看到的事件填满您的存储(恭喜您 999,999,999,999,999,999,999 岁生日!)。
这需要更多的工作,但解决方案基本上是存储一个(或多个)重复规则表,您在构建日历时将日历条目链接到该表:
“对于显示的一周中的每一天,检查在这些天重复的事件”
“对于所显示的该月的每一周,检查在这些周内重复的事件”
“一年中的每个月”等等......
您必须执行多少次检查取决于您想要的重复类型(和持续时间)。
至于抑制事件,这是另一个表格,列出了必须抑制的日期/时间点。 “如果显示星期一,则显示每月重复的所有事件,但抑制表中列出的事件除外”
评论跟进:
好吧,您将拥有标准日历条目表来存储核心信息。日期/时间等...然后至少有两个其他表来存储重复信息。一个存储您的重复规则的系统。 “每个星期一”、“每月的第一天”、“每年”等......以及链接日历条目和规则的第三个表
so:
calendar entries table <---> link table <---> repeat rules table
查询是构建事物的问题,以便对于您正在考虑的日期,出现适当的规则并为您提供要显示的日历条目的 ID。如果您执行一个奇特的查询,根据您传入的日期动态链接到适当的规则,则可能会变得丑陋。