【问题标题】:Recurring events, how to store them?重复事件,如何存储?
【发布时间】:2016-05-18 23:24:49
【问题描述】:

我发现了一些关于经常性事件的问题,但我还没有进入一个接近我需要的问题。我正在努力了解如何处理通知系统的重复事件。

目前我知道两种选择:

  1. 存储具有模式的单个事件并动态计算任何未来事件(例如永远重复等)。使用 cron 模式甚至更好的 RRULE 东西。

  2. 将所有未来事件存储为单个事件,直到某个日期。

我对选项 1 的问题是我需要我的事件来保存一些其他数据,例如确认,如果我有重复事件,我可能需要为每个重复事件保存多个确认。这会转化为令人讨厌的 hack 以使事情正常进行,我什至不想考虑如何处理显示与其他数据相关联的过去和未来事件。

选项 2 更好,因为即使在单个事件中,我也可以存储与每个相关的所有额外数据。问题在于处理未来事件。首先,如果事件永远重复,那么我应该存储多少事件。如果用户想要显示尚未生成的未来事件,我是否只是做块并即时生成?这个选项也感觉像个 hack。

到目前为止,我已经阅读了一些关于 RRULE 的内容,发现我可以将 rrule.js 用于前端,而将其他一些包用于后端。

编辑 1:为了更好地澄清,我没有完全准备好使用完整的 iCal 格式标准,我想只使用 RRules。但是,我可能会改变主意,因为我仍在寻找选项。

iCal Vevents 和 rrules 应该如何存储在 DB 中?

【问题讨论】:

    标签: cron recurring-events rrule


    【解决方案1】:

    不清楚您是否只关心 rrule 作为表达重复内容的便捷方式,还是希望使用完整的 iCalendar 格式。

    假设后者,选项 1 包含在 RFC5545 中:您将存储一个“主”VEVENT,其中包含基本信息以及 RRULE,每个实例为基本事件的“例外”一个 VEVENT,其中每个异常都由其 RECURRENCE-ID 标识。

    RFC5545 没有此类事件的任何示例,但 RFC5546 在https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8 有非常接近的内容(使用 RDATE 而不是 RRULE,不需要 METHOD 属性,但你明白了)。

    【讨论】:

    • 我会说你非常接近我需要的东西。目前我还没有准备好使用完整的 iCal 格式,但以后可能会决定。这些例子有点帮助,但还不够。我正在努力理解如何在重复中更改一个事件。 VEvent 应该如何存储在数据库中?
    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多