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

Eug*_*eMi 9 schema database-design calendar ruby-on-rails appointment

在我的应用程序中,我有一个提供商,有一个时间表和客户从预定时间预约.我需要以下功能.

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

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

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

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

Ste*_*oke 6

1.创建一个事件表:

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

b)重复事件 - 添加列: - isrecurring - 默认为0 - recurrencetype(每日,每周,每月) - recurevery(重复发生时的计数) - mon,tue,wed,thur,fri,sat,sun - 每周复发的日期 - 月和月 - 每月复发

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

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