Database design 如何将数据(注释、受让人)存储到使用RRULE生成的重复事件中

Database design 如何将数据(注释、受让人)存储到使用RRULE生成的重复事件中,database-design,calendar,icalendar,rrule,Database Design,Calendar,Icalendar,Rrule,我正在构建一个日历应用程序,允许用户创建重复事件 我不是在MongoDB中为每个定期事件创建一个新对象,而是创建一个附加了定期规则的单个事件对象 然后在客户端上,我正在“扩展”定期规则,以便为事件的每次定期创建临时对象,以便它们都显示在日历中 这一切都非常有效,可以防止我的数据库在频繁发生事件时被数百个对象填满。我的问题是:如何存储每个重复事件的数据?例如,使用谷歌日历,我可以创建一个定期事件,然后在每个定期事件中添加“注释”。注释可以添加到单个事件,也可以添加到所有事件 到目前为止,我的想法是

我正在构建一个日历应用程序,允许用户创建重复事件

我不是在MongoDB中为每个定期事件创建一个新对象,而是创建一个附加了定期规则的单个事件对象

然后在客户端上,我正在“扩展”定期规则,以便为事件的每次定期创建临时对象,以便它们都显示在日历中

这一切都非常有效,可以防止我的数据库在频繁发生事件时被数百个对象填满。我的问题是:如何存储每个重复事件的数据?例如,使用谷歌日历,我可以创建一个定期事件,然后在每个定期事件中添加“注释”。注释可以添加到单个事件,也可以添加到所有事件

到目前为止,我的想法是当用户想要添加“注释”,为用户正在编辑的重复添加EXDATE,然后为其创建一个新的独立事件对象


我不确定这是不是最好的方法。非常感谢您的建议。

就iCalendar表示而言,建模此类异常的正确方法是将其作为同一事件(同一UID)的一部分,并添加一个RECURRENCE-ID参数。您不应添加EXDATE:

BEGIN:VEVENT
UID:XXX
DTSTART;TZID=zzz:20170401T090000
RRULE:FREQ=DAILY
...
END:VEVENT
BEGIN:VEVENT
UID:XXX
RECURRENCE-ID;TZID=zzz:20170405T090000
DTSTART;TZID=zzz:20170405T090000
... 
END:VEVENT
请注意,异常的RECURRENCE-ID应始终对应于从RRULE计算的日期时间,而异常的DTSTART可能不同(例如,如果在一个实例中,将事件时间从9移动到10,RECURRENCE-ID将为T090000,而DTSTART将为T100000)

另见