1

我正在构建一个使用 FullCalendar 作为前端的日历系统。后端将是 MySQL/PHP。

它将存储由应用程序生成和插入的用户的公共约会列表。这些约会将是一个单一的事件,将在同一天开始和结束。此外,由于个人承诺,用户将能够在日历中标记其不可用。后一种功能需要使用重复事件。我一直在考虑使用基于 iCal 的结构,而不是重新发明轮子。这篇文章对ical-field-list-for-database-schema-based-on-ical-standard确定数据库结构非常有帮助。

我创建了申请表,允许用户输入必要的数据以存储私人单次/定期约会。提交表单后,数据通过 Ajax 发送到服务器。我发现了一个很棒的 PHP 脚本,它可以根据用户输入的参数生成一个重复日期数组,可以是原生格式,也可以是使用 RRULE。

我不确定存储/检索这些重复日期的最佳方式是什么。应用程序需要能够为用户呈现日历视图,包括公共和私人日期。该应用程序还需要能够返回例如在给定时间/日期期间可能有空的所有用户。

以 iCal 格式存储所有事件并能够根据需要检索事件是否足够?我预见的问题是重复事件不容易搜索,因为它们的参数必须动态扩展?我正在考虑为每个单独的事件(如生成的)创建第二个表,并引用创建它的原始 RRULE。我希望限制用户可以输入的重复日期的数量,以防止用户在接下来的 100 年内每天都输入事件!我认为这种方法还可以让我编辑最初由重复规则创建的单个事件。

这是一个好方法,还是有更好的方法?

4

2 回答 2

1

沿着以下几行的表格怎么样:

CREATE TABLE RecurringAppointments (
    startdate DATE NOT NULL,
    enddate   DATE,
    freq      INT  NOT NULL, -- contains #days between each occurrence
    -- etc.
 )

然后,获取发生在给定的所有此类约会thedate

SELECT * FROM RecurringAppointments
WHERE
      thedate BETWEEN startdate AND enddate
  AND DATEDIFF(thedate, startdate) % freq = 0;
于 2012-04-25T17:26:05.607 回答
1

看看在构建日历应用程序时,我应该在我的数据库中存储日期还是重复规则?.

您应该存储与有效性信息相关联的 rrule、exrule、rdate 和 exdate(以便能够跟踪随时间的变化:例如,如果您的用户可能想回顾过去发生的特定事件以及 rrule 在发生和他/她回顾的时间点),对于发生次数有限的事件,对时间窗口进行开始和结束的预计算,以便于查询,并有一个滚动窗口,您可以在其中发生发生表中的所有事件。当用户在时间窗口之外寻找事件时(应该很少有人会回顾一年多或未来一年多),您计算特定于用户请求的时间窗口的相关事件并即时生成它们.

于 2012-05-05T07:10:30.077 回答