java 事件重复_具有异常的重复事件的数据库设计

我正在构建一个需要存储/管理不同类型事件的系统 . 为简单起见,我将专注于设计一个日历(我正在构建一些稍微不同的东西,但日历是一个很好的比喻,很容易推理) . 我想听听可能的数据库/架构设计思路 .

Problem Description

我有一个包含不同类型事件的日历(为简单起见,假设只有一种类型的事件:任务) . 用户可以为特定日期添加新事件,编辑(更改某些详细信息,如 Headers 或移至其他日期)或删除 . 可能存在一次性事件和重复事件(具有不同类型的重复:每X天,每月的第15天,周一的每周;有点像简单的cron) . 当用户移动重复出现的事件时,此事件的所有其他实例都以相同的方式移动(例如:3天) . 重要部分:重复发生的事件可能有例外 . 因此,举例来说,假设我有一个每7天重复一次的重复事件A.但是我想改变下周的日期,所以不是星期二,而是分配到星期五,之后它仍然会在星期二发生 . 移动“父”事件时,不应影响此“异常”事件 .

此外,每个周期性事件都可以有其他信息,这只与1个特定实例相关,例如:我有相同的重复事件A每7天重复一次,我想为本周实例添加一条说明“X”的注释,以及我想为下个月的事件添加另一个注释“Y” - 这些字段仅对该单个实例可见 .

Ideas

具有常规一次性事件的系统非常简单,因此我不会讨论这个问题,只关注重复发生的事件 .

1. 一个可能的解决方案是类似于OOP的解决方案:我可以使用 Event , end_date (可以是 null ), recurrence_type (类似枚举,可能的值为 EVERY_X_DAYS , DAY_OF_WEEK , DAY_OF_MONTH )和 recurrence_value (例如 7 ) . 当用户添加新的周期性事件时,我只是在数据库中创建了这样的 Event . 当用户想要更改此事件的1次出现时,我将新的条目添加到类型/类 MovedEvent 的数据库中"inherits"来自 Event ,具有不同的日期,并且具有指向 ID (或 UUID ,如果您愿意)的其他字段 related_to 与之相关的 Event . 但与此同时,我需要跟踪所有的 MovedEvent (否则我会在同一周显示2个事件),所以我需要一个指向所有 MovedEvent 的 moved_events 的 ID 数组 . Disadvantage :每次我想要显示我需要获取的日历 Event 并从 moved_events 中选择所有事件,如果我有很多移动的事件,这不是最佳的 .

2. 另一个想法是将每个事件存储为单独的记录 . IMO它有可能是_2525156 . Disadvantages :每次我想编辑主事件时(例如:我想将事件从"every 7 days"更改为"every 9 days")我需要更改事件的每一次出现 . 但是,更改单个实例更容易 .

SQL/NoSQL? Scale details

我在我的项目中使用PostgreSQL,但我对NoSQL数据库有基本的了解,如果它们更适合这类问题,我可以使用它 .

比例:假设我有5k用户,每个人每周平均有150个事件,其中40%可以是“例外” . 因此,我想设计这个系统是有效的 .

Similar Questions & Other Resources

我've just started reading Martin Fowler'(http://martinfowler.com/apsupp/recurring.pdf)但我不确定它是否适用于我的问题,如果是,那么如何根据本文档设计数据库模式(欢迎提出建议) .

有类似的问题,但我没有看到任何提及“例外”(更改1个事件实例而不影响其他事件),但也许有人会发现这些链接有用:

很抱歉,我想很好地描述问题 . 然而,我觉得这很混乱,所以如果你有其他问题,我会很乐意提供更多细节 . 同样,我想了解可能的数据库/架构设计思想以及任何其他建议 . 谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值