【问题标题】:Daily Time Schedule (MySQL)每日时间表(MySQL)
【发布时间】:2015-05-05 13:49:16
【问题描述】:

这就是我所拥有的:

days_of_week
+----+-------------------+
| id | name              |
+----+-------------------+
|  1 | Monday            |
|  2 | Tuesday           |
|  3 | Wednesday         |
|  4 | Thursday          |
|  5 | Friday            |
|  6 | Satday            |
|  7 | Sunday            |
+----+-------------------+

time
+----------+-------------+
| id       | time        |
+----------+-------------+
| Integer  | hh:mm:ss    |
+----+-------------------+

schedule
+---------+---------+----------+---------+
| id      | user_id | time_id  | day_id  |
+---------+---------+----------+---------+
| Integer | Integer | Integer  | Integer |
+---------+---------+----------+---------+

我应该把活动栏放在哪里,例如早餐 08:30。现在“早餐”必须存储在这里的某个地方。我暂时不知道在哪里,但如果有人知道如何正确规范化,请与我分享,并告诉我你为什么这样做或推荐这样做。提前非常感谢。

我想要达到的目标:

Monday: Date of that day here
08:00 Breakfast
08:30 Something else
09:00 Introduction

Tuesday: Date of that day here
08:00 Breakfast
09:00 Hackathon begins
12:30 Lunch

你懂的。

澄清一下:

用户可以选择添加一个时间表,然后创建这个时间表,其中包括在这些选定的日子里发生的事情的时间表,例如,如果有一个 Hackathon 发生了 3 天,用户可以创建一个这三天的时间表,以及将要发生的时间和活动。例如。 08:00 早餐,09:00 介绍,09:30 设备安装

发现这个: 非常规范,Method for storing/displaying repeating weekly schedule

但是,更多的是重复每周计划,这不是我想要实现的。

【问题讨论】:

  • 哈哈!我当然是设计它的人。但是,我仍然不确定将活动内容放在哪里,还是应该放在单独的表中,然后与日程表连接?
  • “是你不需要前两个表”,这没有意义。考虑长期的可维护性。
  • @Strawberry,向我展示示例、SQLfiddle 或任何使用您的模型的教程,并且它实际上可以工作并且可以长期维护而不会造成大问题,非常感谢。
  • 正如 Mike Hillyer 所说,表格的完全标准化可能是可取的,但您可能会发现“完全标准化会给您的设计和应用程序带来 [不必要的] 复杂性”mikehillyer.com/articles/…。在这种情况下,除了我和其他人的建议之外,我认为标准化没有任何好处。

标签: mysql


【解决方案1】:

你打算按周计划重复一周吗?

如果不是,我会考虑删除星期几和时间表并使用标准的DATETIME 字段。您可以在模型验证中弹出任何限制性措施,它还可以使检测冲突变得更容易。

您是否希望定期重复活动?

如果是这样,我会制作一个活动表并从时间表中引用它。

如果没有,我可能会接受描述和时间。

简单

  • 时间表(ID、描述、日期时间)

可重复的活动

  • 时间表(id、activity_id、日期时间)
  • 活动(ID、描述)

一周一周的时间表(带有可重复的活动)

  • 时间表(id、activity_id、day_of_week_id、时间)
  • 活动(ID、描述)
  • Day_of_week(id、标题)

始终选择满足您要求的最简单的选项!

【讨论】:

  • 这不像学校的时间表(几乎)每周都会重复。这是一个构建一次的时间表,一旦那些日子结束,你就会继续下一次。活动(例如早餐等)是手动添加的,用户可以用任何语言手动输入它们。感谢您的回复。
  • @JohnSmith 这仍然不是什么解释,但至少是这样。建议您相应地编辑您的问题。
【解决方案2】:

标准化!既然你已经这样做了:

// others omitted
activity(id, description)
day(id, time_id, activity_id)
schedule(id, day_id)

我可能会遗漏一些东西,但欢迎更正。

【讨论】:

  • 我认为完全规范化是要走的路,毕竟我找到了一个例子,除了它与某些东西有关,但它们最多规范化了 4 个表。
  • 太好了,我想你已经/几乎在那里了。只需要识别实体,然后只规范化或删除冗余实体​​.. 考虑到关系,2 到 3 范式就足够了,除非它真的很复杂。但是您的架构正在向右进行一些调整。有更多的表没有坏处,可以避免冗余数据。希望这会有所帮助。
猜你喜欢
  • 2013-10-28
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
相关资源
最近更新 更多