我正在构建一个自定义事件系统,如果你有一个如下所示的重复事件:
活动A从2011年3月3日起每4天重复一次
要么
活动B于2011年3月1日星期二每2周重复一次
如何以一种易于查找的方式将其存储在数据库中.如果有大量事件,我不希望出现性能问题,在渲染日历时我必须经历每一个事件.
如果您的任务是构建支持重复事件的事件调度系统,您将如何做?如何删除定期活动时的处理方式?你怎么能看到未来事件何时发生?
即在创建活动时,您可以选择"每日重复"(或每周,每年等).
请回复一个设计.我已经习惯了Ruby/Rails,但是使用你想表达设计的任何东西.
我在接受采访时被问到这个问题,并且无法提出我喜欢的非常好的回复.
注意:这里已经被问到/已经回答了.但我希望得到一些更实用的细节,详情如下:
我正在尝试在C#中开发一个与调度程序和日历相关的事件应用程序,其关键要求是表示数据库中的重复事件.表示数据库中重复事件的最佳方法是什么?
更多细节:
在创建活动时,我也向某些用户发送邀请,并且只允许被邀请者在指定的窗口(会议持续时间)内登录会议,或者可能在被邀请者尝试登录时拒绝登录,比如5分钟前预定的会议开始.
我已经阅读了大约 20 篇关于重复事件数据建模选项的不同帖子,并最终确定了一个实现,但在最终细节方面仍然需要一些帮助。
首先,这里描述了我要完成的任务和要求:
显然,我的应用程序的很大一部分是基于调度的。具体来说,我系统的这个组件允许企业客户安排家庭服务的约会。这些约会可以是单次发生的,也可以是重复发生的。虽然这些约会是典型的,因为它们有开始/结束时间等,但每个约会也有与之相关的数据。该数据可能包括诸如入住时间、退房时间、备注等内容。
为了存储重复约会,我的选择是要么在预定时间点生成每个实例,然后在这些实例运行时在数据库中生成新实例,要么即时计算要返回的这些实例。我最终选择了后者,因为我认为从长远来看,该实现更清洁,更易于维护。
话虽如此,根据这篇文章的见解,我选择将我的重复模式存储为 RRULE 字符串,并使用 PGV8 和rrule.js库进行任何计算。那篇文章提到了物化视图的使用(阅读了它们,但从未使用过),但我不确定它是否适用于我的情况,因为我必须在定期约会更改或创建时重新生成这些。似乎我还需要为每个业务创建一个实体化视图,并且不确定这会如何影响存储/性能,因为可能有 1000 个业务。如果您对此有任何见解,请告诉我。
这个想法是有一个表,Appointment,其中包含与约会的实际日期、时间和重复(如果适用)相关的数据。它将至少包含以下字段:
然后,第二个表,AppointmentData,将存储有关约会本身的任何元数据。例如,它可能包含以下字段:
在AppointmentData当实例只会产生Appointment实际上是由服务提供商启动。
一般来说,我只需要能够在任何给定时间检索 31 天或更少的约会(除了检索单个实例)。也就是说,我的想法是能够将开始和结束日期传递给数据库,该数据库将找到该范围内所有约会的单次出现。此外,对于包含重复模式的任何记录,我将使用我的 PLV8 函数返回该范围内的日期列表。该rrule.js 库有一个函数可以返回重复模式 ( rule.between(new Date(2012, 7, 1), new Date(2012, 8, 1))) 的所有日期。
这是我有点磕磕绊绊的地方。现在我在数据库中有一个可以动态计算重复日期的函数,我有点不清楚如何将这些与单个事件“融合”在一起并将它们作为单个结果集返回。请注意,对于每个重复出现的实例,我还需要返回表中的所有列Appointment,例如serviceID.
如果有什么不清楚的,请告诉我。
提前致谢!
我正在编写一个处理人员任务的小应用程序.非常简单,但就桌面设计而言,我所坚持的区域是一个重复性任务的情况,可以是一次性,每天,每周或每月.如果每周一次,那就是特定的一天,每周一次.每月是特定的一天.
我有一个任务表和一个recurring_type_id,并且将在代码中处理重复的任务,但这是理想的方法吗?另一种方法是在创建任务时插入所有任务 - 每个事件时间.但这似乎也不正确.
任何人都可以就设计提出建议,以及如何以可维护和有效的方式处理这个问题?
我正在使用SQL Server 2008 R2