【问题标题】:How do I properly structure my relational mySQL database如何正确构建关系 mySQL 数据库
【发布时间】:2012-11-15 14:31:57
【问题描述】:

我正在制作一个用于员工调度的数据库。我有史以来第一次创建关系 mySQL 数据库,以便我可以有效地管理所有数据。我一直在使用 mySQL Workbench 程序来帮助我想象这将如何进行。这是我目前所拥有的:

我脑海中的设想是,根据图纸,我将在schedule 表中设置时间表,该表使用来自其他表的引用,如图所示。然后当我需要显示这个时间表时,我会从schedule 表中提取所有内容。过去每当我使用数据库时,它都不是规范化类型,所以我只需将数据输入到一个表中,然后从该表中提取数据。现在我正在处理一个更大的项目,我确信像这样拆分所有表(规范化)是可行的方法,但我很难看到最后所有的东西是如何组合在一起的。我感觉它不像我想象的那样工作,@grossvogel 指出了我认为对使这一切正常工作至关重要的一点,那就是使用 join 函数来提取数据。

我开始使用关系数据库的原因是,如果我更改(例如)shift 表,而不是记录 1 是“AM”,我希望它是“Morning”,然后通过cascade选项自动更改相关部分。

我在此处发布此内容的原因是因为我希望有人可以帮助填补空白并为我指明正确的方向,因此我不会花很多时间才发现我转错了方向一开始。

【问题讨论】:

  • 日程和员工是否需要参考license_mat?除此之外,你在哪里看到你的问题?您是否设置了该数据库并使用它?这可能会帮助您开始使用关系数据库。
  • @Argeman 不,你是对的,它只需要引用到员工。我想这就是我困惑的部分原因,我已经更新了我的问题,试图对此有所了解。

标签: mysql relational-database mysql-workbench


【解决方案1】:

也许您缺少的部分是使用带有joins 的查询从多个表中提取数据的想法。例如(仅合并您的几个表):

SELECT Dept_Name, Emp_Name, Stat_Name ...
FROM schedule
INNER JOIN departments on schedule.Dept_ID = departments.Dept_ID
INNER JOIN employees on schedule.Emp_ID = employees.Emp_ID
INNER JOIN status on schedule.Stat_ID = status.Stat_ID
...
where ....

还要注意a schedule table that contains all of the information needed to be displayed on the final page 不符合关系数据建模的精神。您希望每个表都对应用程序中的某些实体进行建模,因此如果每行代表一个班次,则将schedule 重命名为shifts 可能更合适。 (我通常为表使用单数名称,但那里有multiple perspectives。)

【讨论】:

  • 我想你只是为我填补了一个大洞,我想不通的一件事是如何从所有不同的表中提取数据。我想我的头要爆炸了。
  • 我花了一两天的时间才真正理解这一点,最终你总结得很好。我很难看到,但现在我相信我明白我需要走的路。再次感谢您的帮助:)
【解决方案2】:

坦率地说,这是一个非常难以回答的问题,因为您可能会得到一百万个不同的答案,每个答案都有自己的优点。我建议你看看这些(那里可能也有更好的链接,这些似乎是需要注意的好点):

http://www.devshed.com/c/a/MySQL/Designing-a-MySQL-Database-Tips-and-Techniques/

http://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form

http://www.sitepoint.com/forums/showthread.php?66342-SQL-and-RDBMS-Database-Design-DO-s-and-DON-Ts

我还建议您尝试更详细地解释您想要实现的目标,而不仅仅是发布表格结构,让我们尝试弄清楚您所做的事情的意思。

通常通过尝试口头解释某些事情,您可能会在完全没有任何其他人输入的情况下获得所需的认识!

我要提到的一件事是,您不必对表格进行非规范化以一起报告某些值,您应该考虑此类事情的视图...

【讨论】:

  • 感谢您的意见。我阅读了您发布的链接,那里有一些很好的信息。我应该提到我在 mySQL 领域真的很舒服,因为我过去使用过许多数据库,但这是我第一次需要对它们进行规范化,这主要是我遇到的问题上。干杯。
  • 我实际上有点害怕这是您第一次必须对一组表进行规范化...根据我的经验,规范化是您开始的地方,并且只有当您需要优化时对于您最终会查看反规范化的特定查询。
  • 这是一个完全有道理的说法,实际上,一旦我开始这样做,我也是这么想的。然而,到目前为止,我所做的大部分事情都是规模很小的,实际上只需要一张桌子。听起来很疯狂,但它确实发生了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2015-04-20
相关资源
最近更新 更多