如何正确构建我的关系mySQL数据库

时间:2012-11-14 11:39:24

标签: mysql relational-database mysql-workbench

我正在创建一个用于员工安排的数据库。我是第一次创建关系mySQL数据库,以便我可以有效地管理所有数据。我一直在使用mySQL Workbench程序帮助我想象这是怎么回事。以下是我到目前为止的情况:

Mock Up

我在脑海中想到的是,根据图纸,我会在schedule表中设置日程表,该表使用其他表中的引用,如图所示。然后当我需要显示这个时间表时,我会从schedule表中提取所有内容。每当我使用过去的数据库时,它都不是标准化类型,所以我只需将数据输入一个表,然后从该表中拉出数据。既然我正在处理一个更大的项目,我确信所有表格都是这样分割(规范化)的方法,但是我很难看到最终所有内容是如何组合在一起的。我觉得它不像我画的那样有效,@ gerossvogel指出了我认为对于使这一切工作至关重要的事情,那就是使用join函数来提取数据。 / p>

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

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

2 个答案:

答案 0 :(得分: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可能更合适。 (我通常使用表格的单数名称,但那里有multiple perspectives。)

答案 1 :(得分: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

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

通常通过尝试口头解释某些内容,您可能会在没有任何其他人输入的情况下实现您需要的实现!

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