如何正确构造关系型mySQL数据库

如何正确构造关系型mySQL数据库,mysql,relational-database,mysql-workbench,Mysql,Relational Database,Mysql Workbench,我正在制作一个用于员工日程安排的数据库。我第一次制作了一个关系型mySQL数据库,这样我就可以有效地管理所有的数据。我一直在使用mySQL Workbench程序来帮助我可视化这将如何进行。以下是我到目前为止的情况: 我脑海中描绘的是,根据图纸,我会在附表表格中设置附表,该表格使用其他表格中的参考,如图所示。然后,当我需要显示此计划时,我将从计划表中提取所有内容。过去,每当我使用数据库时,它都不是标准化类型,因此我只需将数据输入一个表中,然后从该表中取出数据。现在我正在处理一个更大的项目,我确

我正在制作一个用于员工日程安排的数据库。我第一次制作了一个关系型mySQL数据库,这样我就可以有效地管理所有的数据。我一直在使用mySQL Workbench程序来帮助我可视化这将如何进行。以下是我到目前为止的情况:

我脑海中描绘的是,根据图纸,我会在
附表
表格中设置附表,该表格使用其他表格中的参考,如图所示。然后,当我需要显示此计划时,我将从
计划
表中提取所有内容。过去,每当我使用数据库时,它都不是标准化类型,因此我只需将数据输入一个表中,然后从该表中取出数据。现在我正在处理一个更大的项目,我确信像这样拆分(规范化)所有的表是一种方法,但是我很难看到最终所有的表是如何组合在一起的。我有一种感觉,它不像我想象的那样工作,@grossvogel指出,我认为这一切工作的关键是使用
join
函数提取数据

我开始使用关系数据库的原因是,如果我对
shift
表进行了更改(例如),并且记录1不是“AM”,而是希望它是“Morning”,那么它将通过
cascade
选项自动更改相关部分


我之所以在这里发布这篇文章,是因为我希望有人能帮我填空,并为我指明正确的方向,这样我就不会花很多时间才发现我在一开始就转错了方向。

坦白说,这是一个很难回答的问题,因为你可以得到一百万个不同的答案,各有所长。我建议你看看这些(可能还有更好的链接,这些似乎是值得注意的):

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

通常,通过口头解释,你可能会在没有任何其他人参与的情况下意识到你需要的东西


我要提到的一件事是,您不必对一个表进行反规范化以同时报告某些值,您应该考虑这类内容的视图…

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

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

通常,通过口头解释,你可能会在没有任何其他人参与的情况下意识到你需要的东西


我要提到的一件事是,您不必对一个表进行反规范化以同时报告某些值,您应该考虑这种情况的视图…

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


还请注意,
包含最终页面上需要显示的所有信息的调度表
不符合关系数据建模的精神。您希望每个表对应用程序中的某个实体进行建模,因此,如果每一行表示一个移位,则将
schedule
重命名为类似
shift
的名称可能更合适。(我通常对表使用单数名称,但也有。)

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


还请注意,
包含最终页面上需要显示的所有信息的调度表
不符合关系数据建模的精神。您希望每个表对应用程序中的某个实体进行建模,因此,如果每一行表示一个移位,则将
schedule
重命名为类似
shift
的名称可能更合适。(我通常对表格使用单数名称,但也有。)

日程安排和员工需要参考许可证吗?除此之外,你认为你的问题在哪里?你建立了那个数据库并使用它了吗?这可能会帮助您开始使用关系数据库。@Argeman不,您是对的,它只需要引用到员工。我想这是我困惑的一部分,我已经更新了我的问题,试图让更多的人了解这一点。日程安排和员工需要参考许可证吗?除此之外,你认为你的问题在哪里?你建立了那个数据库并使用它了吗?这可能会帮助您开始使用关系数据库。@Argeman不,您是对的,它只需要引用到员工。我想这是我困惑的一部分,我已经更新了我的问题,试图让更多的人了解这一点。谢谢你的输入。我通读了你发布的链接,里面有一些很好的信息。我应该提到的是,我在mySQL领域非常适应,因为我过去使用过很多数据库,但这是我第一次需要对它们进行规范化,而这正是我遇到的主要问题。干杯。事实上,我有点震惊,这是你第一次不得不对一组表进行标准化…根据我的经验,标准化是你开始的地方,只有当你需要优化特定的查询时,你才需要
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 ....