数据库设计:计划,包括重复

Sta*_*bie 5 php mysql scheduling scheduler

我需要开发一个支持"时间表"的应用程序.时间表示例:

  • 2011年1月1日上午9点
  • 2011年1月1日上午9点至10点
  • 每周一上午9点​​,从2011年1月1日起
  • 每个星期一上午9点​​,从2011年1月1日到2011年2月1日
  • 每周一上午9点​​,从2011年1月1日起发生10次
  • 等等

如果您已经看过Outlook的调度程序,那基本上就是我需要的.以下是他们用户界面的屏幕截图:http://www.question-defense.com/wp-content/uploads/2009/04/outlook-meeting-recurrance-settings.gif

我如何在数据库中建模这些信息?请记住,我还需要查询这个,例如:

  • 今天的预定活动是什么?
  • 特定经常性预定活动的下一个10个日期/时间是什么?
  • 等等.

我正在使用PHP/MySQL,但我对其他解决方案持开放态度.建议?

dre*_*nde 3

我个人的意见是单独创建所有事件,并指定开始日期和结束日期。然后为事件生成一个唯一标识符(可能是您创建的第一个事件的事件 ID)并将其分配给所有事件(以便您知道它们以某种方式链接)。

优点:

  • 容易做到(您只需计算事件应该发生的时间并仅创建一次)
  • 易于更改(您可以在第一个事件上保存重复,然后全部重建 - 删除并重新创建)
  • 易于删除(它们有一个共同的唯一ID)
  • 很容易找到(与上面相同)

缺点:

  • 您需要一个开始结束日期

——从这里追加——

提议的模型:

餐桌活动

  • id 大整型(自动递增)
  • ref_id big int(这是id的外键)
  • date_start 日期
  • date_end 日期
  • title 细绳
  • ..您的自定义字段..
  • saved_recurrence 文本

假设您有一个每周三和周五重复 4 周的活动:

  • 收集对象中的重复内容并将其转换为 JSON(重复类型、周期、最终日期等)
  • 计算每个事件的日期
  • 使用=0 和=保存 JSON 对象在表Event上创建第一个事件并获取使用的id (自动递增)ref_idsaved_recurrence
  • 更新第一个事件记录并设置ref_id= id
  • 始终使用相同的内容创建下一个事件ref_idsaved_recurrence此处可以为空)

您现在应该有 8 个具有相同ref_id. 这样就可以轻松获取任何日期间隔内的事件。当您需要编辑事件时,只需检查ref_id. 如果为0,则为单个孤立事件。如果没有,您有一个 ref_id,您可以搜索它来获取所有事件实例。