0

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

小样

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

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

我在这里发布这个的原因是因为我希望有人可以帮助填补空白并为我指明正确的方向,所以我不会花很多时间才发现我一开始就走错了方向.

4

2 回答 2

3

也许您缺少的部分是使用查询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每行代表一个班次可能更合适。(我通常对表格使用单数名称,但那里有多种视角。)

于 2012-11-15T03:39:14.403 回答
1

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

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

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

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

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

于 2012-11-14T11:55:34.080 回答