ruby-on-rails – 可用性日历的最佳数据库模式是什么,它允许安排约会(重复发生和单个)

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

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

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

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

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

解决方法

1.创建一个事件表:

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

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

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...