如何设计Google日历的表格结构,如重复功能?

时间:2013-02-25 13:51:53

标签: database-design

如何以最佳方式为Google日历设计表格结构,例如重复功能?

Google日历可让用户无限期或确定地重新安排活动。现在,当我们这样做时,在数据库表中管理这些类型的未来数据的最佳方法是什么?

例如:我有一个名为events的表,我存储了所有非重复类型的常规事件,并安排了某些日期和时间。现在,当涉及到重复发生的事件时,我应该创建一个单独的表并将其存储为模板吗?

例如,让我们非常简单:

**Events**
id
title
description
datetime_from
datetime_to
status


**Event_Schedule**
id
title 
description
time_from
time_to
repeats_on (Daily, Weekly, Monthly)
repeat_config ____serialized array or object

字段不完整但这只是为了给出一些想法,我在这里可以做的是cron-job或者调度程序可以为下一次出现创建一个事件。如果要在日历上显示它,可以通过从Event_Schedule表生成数据来完成,如果用户编辑了未来事件的数据,我们可以在Events表中存储该事件的数据。 这是正确的方式还是可以更好的方式完成?我可以考虑将它存储在与模板相同的表中,但我找到一个单独的表作为更好的方法。

1 个答案:

答案 0 :(得分:2)

您的数据库不必执行所有操作。您的程序代码可以负责某些日历渲染。

这是Event数据库表的一个版本。

Event
-----
Event ID
Event Title
Event Location
Event Description
Event Start Time Stamp
Event End Time Stamp
Repeat Frequency (None, Daily, Weekly, Monthly, Quarterly, Yearly, 
    every nth day (every 3rd Tuesday)
    other odd frequencies 
        (the Tuesday following the first Monday in November, the Sunday 
         following the paschal full moon, which is the full moon that 
         falls on or after the vernal (spring) equinox)

您的程序将负责浏览事件表的事件行,查看哪些事件具有重复频率,以及计算将在显示的月份中显示哪些事件。

基本上,您的程序代码必须计算以下程序对象。这不是数据库表。

Calendar Event
--------------
Event Date
Event Start Time
Event End Time
Event Title
Event Location
Event Description.

您将显示当月显示的日历事件列表或数组。