可用性日历的最佳数据库架构是什么,它允许安排约会(重复发生和单个))

时间:2011-10-04 05:49:18

标签: ruby-on-rails database-design calendar schema appointment

在我的申请表中,我有一个提供商,其中包含一个时间表,以及从预定时间预约的客户。我需要以下功能。

提供者: - 能够指定重复出现的可用性。例如Mon 9-5,Tues 10-3等。 - 能够使数据变黑。例如 - 本周一不可用。 - 能够添加单个,而不是重复发生的日期/时间段。例如 - 这个星期六9-5。

客户: - 能够预订单人约会。 - 能够预订重复预约。 (每周一9-4)。

到目前为止,我想出了3个选项:

  1. 将计划划分为30分钟,并为每个间隔/提供者对创建一个数据库条目。每个间隔可以是免费的或预订的。当客户预约时,我们将间隔标记为已预订。这种方法的问题在于浪费了大量空间,而且我不确定重复预订的搜索性能有多好。
  2. 将每个可用期限保存为“事件”。如果它重复出现,请复制该事件。搜索免费插槽时,请搜索预订表以确保没有重叠预订。在这种情况下,搜索重复出现的插槽似乎有点尴尬。要找到明年9月5日可用的所有提供商,我们必须搜索所有匹配的“事件”,并查找所有具有52个匹配事件的提供商。
  3. 将每个可用期限保存为“事件”。如果它重复出现,请添加一个标志。当搜索免费插槽时,搜索预订表以确保没有重叠预订。它使搜索重复约会变得更容易。为了“黑掉”假设要重复出现的插槽,我们可以插入一个假的预订。

1 个答案:

答案 0 :(得分:6)

1.创建一个事件表:

a)使用基本列eventdate,starttime,endtime以及事件的其他详细信息 - 这些是繁忙时间,因此您在日历上阻止了

b)重复发生的事件 - 添加列: - isrecurring - 默认为0 - recurrencetype(每日,每周,每月) - recurevery(重复发生时的计数) - 星期一,星期二,星期三,星期四,星期五,星期日,星期日 - 每周复发的日子 - 月和月 - 每月复发

2.在日历上创建定期活动时遇到了挑战: - 如果你一次创建所有这些(比如说接下来的6个月),每当你编辑一个时,其他的都必须更新 - 如果您只在前一个事件过去时创建了一个事件,那么您需要复杂的逻辑来显示未来日期的日历

3.您还需要制定规则来处理事件是否允许彼此重叠,使用什么资源,事件可以安排到多远