【问题标题】:Fixed Timetable DB Design固定时间表数据库设计
【发布时间】:2010-12-22 15:25:27
【问题描述】:

我想让我的用户指定他们想要联系的时间/日期,我想创建一个包含一周中 7 天的固定时间表,并让用户指定他有哪些空闲时间。

我在弄清楚如何将这些信息存储在数据库中时遇到了一些麻烦,谁能帮助我为这种情况设计一个好的表设计?

【问题讨论】:

  • 您真的需要小时级分辨率吗?在不了解您的确切问题的情况下,我很想有一个“首选联系时间”字段,其中包含一些简单的选择,例如“早上”、“下午”或“晚上”
  • @Ken:这也可能是一种选择,我会考虑到这一点。感谢您的输入。 =)
  • @Ken:我刚刚意识到我需要提供一天级别的解决方案,用户可能希望在早上联系,除了周末。

标签: sql mysql database database-design sqlite


【解决方案1】:
  • Day 表包含日期列表(周日、周一、周二..),您也可以使用枚举字段代替。
  • Period 表包含可用(每小时)时段的列表,或者您也可以使用一天中的一部分。

【讨论】:

  • 感谢@Vainstah 的反对;在您看到“冗余规范化”的地方,我看到了预加载的查找表。如果您需要在解决方案中“使用应用程序逻辑”解决“重叠”和重复条目(见下文),我看到了一个原本不应该存在的问题。
  • 没什么私人的,但我们的两个模型都捕获了相同的语义。您刚刚创建了一个顶级数据模型。为了使这些表有用,我需要查询 Day - Contact 和 Period。这是数据建模的学术观点,而不是实际观点。您的解决方案还需要 - 相同的 - 逻辑来防止重叠。
【解决方案2】:

我认为不涉及日期。如果涉及日期,请删除日期并将时间类型更改为日期时间类型。

所以你需要看起来像这样的条目·

person_id - day(int 0-7) - time_low - time_high。

这就是您表示数据所需的全部内容。可用性由 time_low 和 time_high 之间的范围表示。

您将需要应用程序逻辑来合并重叠和解决重叠。应该不会太难。

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多