【问题标题】:Storing Calendar Data in MySQL在 MySQL 中存储日历数据
【发布时间】:2012-09-04 06:49:21
【问题描述】:

只是一个关于存储日历数据的快速架构问题。

基本上,我有一个出租服务数据库。在前端,有一个日历显示未来每个日期的“可用”或“不可用”。在后端,用户可以在 jQuery 日历上将任何日期/日期范围设置为可用或不可用(1 或 0)。

我的问题是,您将如何将这些数据存储在 mysql 中并在前端检索它?

可能所有日期都可用并存储不可用的日期吗?那么如果它们再次设置为可用,则删除该日期的记录?

干杯, RJ

【问题讨论】:

    标签: mysql database-design architecture


    【解决方案1】:

    可能所有日期都可用并存储不可用的日期吗?那么如果它们再次设置为可用,则删除该日期的记录?

    是的,我会这样做,但租用到期时我不会删除记录 - 您很容易知道租用已过期,因为它是过去的,因此您也会自动保留租用历史记录。

    毕竟,可用日期的数量是无限的1,所以如果你反过来(并存储空闲日期),你将不得不人为地限制支持的日期范围。

    1 未来。而且,在某种意义上,过去也是。

    另外,我猜你想要一些额外的信息,以防服务被租用(例如租用者的姓名),如果租用由不存在的行表示,将无处存储!


    由于租用的粒度是一整天,我认为您正在查看类似于这样的数据库结构:

    注意 RENTING_DAY PK 如何自然地防止重叠。

    或者,您可以放弃 RENTING_DAY,直接在 RENTING 中设置 START_DATE 和 END_DATE,但这需要明确的 range overlap checks,即 may not scale ideally

    【讨论】:

    • 很好的答案,谢谢。并感谢您提供重叠检查的链接。存储日期范围很重要,因此我会检查是否有重叠并根据需要进行更新/替换。
    • +1 经过更多思考并在回答related SO question 时,我认为单日记录更容易管理在该日期范围内发生的更改/修改。 OTOH,如果start_end_date 之间的单日没有更新,那么他可以选择任何一种方式。
    【解决方案2】:

    决定默认是Available还是Unavailable

    可能有所有可用的日期并存储不可用的日期?

    所以默认是可用的?

    然后您可以将unavailable_startunavailable_end - 存储为日期字段。对于单日,unavailable_start = _end。然后很容易查询一个月或任何日期范围并返回该范围内的不可用时间段。然后让 jQuery 解析它以显示这些日期的日历详细信息。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2014-05-04
      • 2011-11-09
      • 1970-01-01
      • 2022-01-08
      • 2013-06-24
      • 2012-02-12
      • 1970-01-01
      相关资源
      最近更新 更多