每日时间表(MySQL)

每日时间表(MySQL),mysql,Mysql,这就是我所拥有的: days_of_week +----+-------------------+ | id | name | +----+-------------------+ | 1 | Monday | | 2 | Tuesday | | 3 | Wednesday | | 4 | Thursday | | 5 | Friday | | 6 | Satd

这就是我所拥有的:

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
你明白了

澄清:

用户可以选择添加计划,然后创建该计划,并包括在所选日期内将要发生的事情的计划,例如,如果3天内发生了一次Hackathon,则用户可以创建这三天的计划,以及将要发生的时间和活动。例如08:00早餐、09:00介绍、09:30设备安装

我们发现: 非常正常,

然而,这更多的是为了重复每周的日程安排,这不是我想要实现的

您是否打算按周计划重复一周

如果没有,我会考虑删除星期和时间表的日期,并使用标准<代码>日期时间> /Case>字段。您可以在模型验证中弹出任何限制性措施,这也可以使检测冲突变得更容易

您是否希望定期重复活动

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

如果不是,我可能会满足于描述和时间

简单

  • 计划(id、说明、日期时间)
可重复的活动

  • 计划(id、活动id、日期时间)
  • 活动(id、说明)
每周计划表(带可重复活动)

  • 时间表(id、活动id、周中日id、时间)
  • 活动(id、说明)
  • 每周的第天(id、标题)

始终选择满足您需求的最简单选项正常化!既然您已经在这样做了:

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

我可能会错过一些东西,但我愿意改正。

哈哈!当然是我设计的。然而,我仍然不确定活动内容应该放在哪里,或者应该放在一个单独的表中,然后与时间表表连接?“是不是你不需要前两个表”,这没有意义。考虑一下长期的可维护性。@草莓,给我看一些例子,SQLfiddle或任何使用您的模型的教程,它实际上可以工作,并且在长期内可以维护,而不会造成巨大的问题,非常感谢。让我们来看看。正如Mike Hillyer所说,表的完全规范化可能是可取的,但您可能会发现“完全规范化会给您的设计和应用程序带来[不必要的]复杂性”。在这种情况下,除了我和其他人的建议之外,我看不到规范化所带来的任何好处。这不像学校的时间表(几乎)每周重复一次。这是一个构建时间表,一旦这些天结束,你就进入下一次。活动(如早餐等)是手动添加的。用户可以用任何语言手动键入。感谢您的回答。@JohnSmith这仍然不是一个很好的解释,但至少是一些东西。建议您相应地编辑您的问题。我认为完全规范化是一条路要走,毕竟我找到了一个示例,除了它与某些东西相关,但不是嘿,规范化了多达4个表。那太好了,我想你已经/几乎达到了。只需要识别实体,然后只规范化或删除冗余实体。2到3正常形式足够好,因为关系非常复杂。但是你的模式通过一些调整向右转。拥有更多的表没有坏处,对你来说很好避免冗余数据。希望这有帮助。