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