我需要存储一次,每天,工作日,每周,一周中的某些日子,一月中的某些日子,这可能是数字或符号,如每个月的第一个星期一,等等.
有什么建议?要查看的任何代码,数据结构或架构?
有复杂的解决方案和简单的解决方案 两个最简单的解决方案是:
将重复发生的事件扩展到某些固定数量的实例,或将来的某个固定日期范围.将FK recurrence_id存储到指向重复描述的每个实例,并允许批量编辑和取消.
预先调出扇出方法的优点是它可以非常容易地实现重复异常,这几乎肯定是您获得的第一个功能请求.
在显示时计算.计算机速度很快,根据您希望能够回答的有关数据的问题,计算日期范围内的所有事件通常很容易.您可以聪明并尝试在进行重复计算之前快速包围日期范围,或者您可以从开始日期强制它.
除此之外,您只需要一个存储重复规则的解决方案,该规则适用于您用于计算重复的任何内容.(例如,如果您使用的是iCalendar启用库,那么您的架构是varchar(255),其中包含RRULE值)
如果您不得不推出自己的重复计算器,并且希望保持简单,那么将每次,每周,每月或每年的重复次数限制在您的前80%用例中,并且非常容易计算.
此时您的潜在重复模式如下所示:
id recurrence_start recurrence_end type (daily|weekly|monthly|yearly) day_of_week (for weekly) month day_of_month
坦率地说,复杂的解决方案可能不值得:)