Ruby on rails 对于允许安排约会(重复和单一)的可用性日历,最好的数据库模式是什么

Ruby on rails 对于允许安排约会(重复和单一)的可用性日历,最好的数据库模式是什么,ruby-on-rails,database-design,calendar,schema,appointment,Ruby On Rails,Database Design,Calendar,Schema,Appointment,在我的应用程序中,我有一个具有时间表的提供者和根据时间表预订约会的客户。我需要以下特性 提供者: -能够指定重复出现的可用性。例如周一9-5、周二10-3等。 -能够屏蔽数据。例如-在本周一不可用。 -能够添加单个、不重复的日期/时间段。例如,本次Sat为9-5 客户: -能够预订单人约会。 -能够预定再次发生的约会。(每周一9-4) 到目前为止,我提出了3种选择: 将计划划分为30分钟的间隔,并为每个间隔/提供程序对创建一个数据库条目。每段时间间隔可以是免费的,也可以是预定的。当客户预约时,我

在我的应用程序中,我有一个具有时间表的提供者和根据时间表预订约会的客户。我需要以下特性

提供者: -能够指定重复出现的可用性。例如周一9-5、周二10-3等。 -能够屏蔽数据。例如-在本周一不可用。 -能够添加单个、不重复的日期/时间段。例如,本次Sat为9-5

客户: -能够预订单人约会。 -能够预定再次发生的约会。(每周一9-4)

到目前为止,我提出了3种选择:

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

  • 1.创建事件表:

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

    b) 重复事件-添加列: -isrecurring-默认为0 -复发类型(每日、每周、每月) -Recurivery(重复发生的时间计数) -星期一、星期二、星期三、星期四、星期五、星期六、星期日-每周重复的几天 -月和月日-用于每月重复

    2.在日历上创建周期性事件时会遇到挑战: -如果你一次创建了所有的文件(比如接下来的6个月),每当你编辑其中一个文件时,其他文件都必须更新 -如果仅在前一个事件已过去时创建事件,则需要复杂的逻辑来显示未来日期的日历


    3.您还需要规则来考虑事件是否允许相互重叠、使用什么资源、事件可以提前多长时间安排

    您能否帮助了解Reccuring events表方案的结构。从上面看,你没有完全理解这个设计的模式吗?