我构建了一个允许用户存储重复事件的调度应用程序。 这是我在阅读互联网上许多相关帖子后想出的(相当简化的)数据库设计:
表约会:保存有关日历上特定事件的信息,并有一个标志,指示它是否经常发生;
表格RRule:频率(以天为单位),开始日期,事件持续时间,复发结束日期;
现在,如果Appointment表中的记录是经常性的,我可以通过克隆对象并简单地更改每个事件的开始日期来构建未来事件。
尽管从规则中构建事件的复杂性增加了,但这对我来说已经有一段时间了。
现在,当我需要将其他数据链接到重复事件时,我遇到了问题,因为它们实际上并不存在于数据库中。例如,我允许用户为每个事件添加观察,并且由于数据库中不存在重复事件,因此观察'专栏是“约会”的一部分。表,没有简单的方法来完成每次重复的单独观察。
另一个问题:我目前正在实施我的系统的财务控制部分,该部分允许用户在其日历上为每个约会创建收据,并且因为我的数据库中不存在经常发生的事件,我无法将它们链接到收据,这是通过约会表上的外键列完成的。
所以这是我的问题:在使用众所周知的rrule模式时,如何将特定信息添加到重复事件中?
我知道谷歌日历允许您为每个定期活动添加特定信息,即使您可以创建一个“永不结束”的日常活动,它实际上会在大约2年后结束,这让我觉得就像他们复制信息而不是使用规则一样。
答案 0 :(得分:0)
你可以有两张桌子。 EventTemplate
& EventInstance
。 EventTemplate
将保存有关事件再次发生的信息。 EventInstance
将为每个活动保留一个条目。您可以在数据库中为每个事件实例创建一个条目,并为观察字段(INNER JOIN)
保留NULL,或者只保留有观察字段(LEFT JOIN)
的用户条目的条目。
因此,建议在任何一种情况下都使用EventInstance表。但是,存储值,您可以决定。我建议你存储NULL并保持每个事件实例的条目。它使得更新事件的方式,以及未来的更新和更清洁的设计。