ERD 关系在访问数据库中没有意义
ERD relationships don't make sense in access database
我正在创建一个数据库作为 class 的最终项目。这是我第一次创建数据库,我遇到了一些麻烦。
现在我从事这项工作的公司实际上没有任何业务规则,至少我可以从在那里工作的三位经理中的任何一位那里得到。所以我根据他们的工作和我在那里工作的知识得出的结论是:
- 一对多员工在现金责任table中有行,每个员工在table中只有一行。
- 一对多员工打卡,但每个员工在系统中只有一条记录。
- 所有员工都有工资,但每个员工只有一份工资
- 部门负责人很多,但每个部门只有一名负责人
- 每个部门领导只能是一个部门的领导
这就是我基于此 ERD 的方式,但是当实际创建具有这些关系的数据库时,它不起作用。我想弄清楚如何更正此 ERD,以便数据库中的关系正确。当我创建数据库时,员工 table 没有三个主键,工资、现金责任和时钟 table 都将员工 ID 作为外键,数据库工作正常目的。
这是 ERD
的 link
一些comments/questions:
如果您打算将工资放在一个单独的 table 中,那么您不妨将它 1:many
。即,将 EmpID
放入 Wages
并从 Employee
中删除 WageID
。这使您可以跟踪每个员工的多个工资,这是现实,因为工资通常会发生变化。您可能有一份工资 begindate/enddate(即 Employee1234 在 2011 年的工资为 10k $,在 2012 年的工资为 15k $)。就像现在 1:1 关系一样,你也可以将它放在一个 table.
中
我没有遵循您的 TimeClock
结构。正如您所写,员工只能 in/clock 下班一次。当然他们会在星期二上班。
CashAccountability
中的逻辑相同。每个员工只能负责一次提款。我认为你在这里寻找多对多关系,你应该研究如何实现这种数据结构。基本上,它允许 CashAccountability
被 linked 给多个员工,一个员工被 linked 给多个 CashAccountability
s.
您可以指定部门领导,但无法显示领导下的员工。即没有 link 给下属的部门。
编辑:
我现在明白你的问题,为什么 Employee table 没有 3 列主键。主键是您想要的任何东西,但将与员工无关的事情作为员工中的一个人来参与是不合逻辑的 table ,尤其不是作为识别该人的主键。 WageID、TimeID 和 CashID 与员工本身无关,因此它们不应该在员工 table 中,当然也不应该在主键中。
我正在创建一个数据库作为 class 的最终项目。这是我第一次创建数据库,我遇到了一些麻烦。
现在我从事这项工作的公司实际上没有任何业务规则,至少我可以从在那里工作的三位经理中的任何一位那里得到。所以我根据他们的工作和我在那里工作的知识得出的结论是:
- 一对多员工在现金责任table中有行,每个员工在table中只有一行。
- 一对多员工打卡,但每个员工在系统中只有一条记录。
- 所有员工都有工资,但每个员工只有一份工资
- 部门负责人很多,但每个部门只有一名负责人
- 每个部门领导只能是一个部门的领导
这就是我基于此 ERD 的方式,但是当实际创建具有这些关系的数据库时,它不起作用。我想弄清楚如何更正此 ERD,以便数据库中的关系正确。当我创建数据库时,员工 table 没有三个主键,工资、现金责任和时钟 table 都将员工 ID 作为外键,数据库工作正常目的。
一些comments/questions:
如果您打算将工资放在一个单独的 table 中,那么您不妨将它
1:many
。即,将EmpID
放入Wages
并从Employee
中删除WageID
。这使您可以跟踪每个员工的多个工资,这是现实,因为工资通常会发生变化。您可能有一份工资 begindate/enddate(即 Employee1234 在 2011 年的工资为 10k $,在 2012 年的工资为 15k $)。就像现在 1:1 关系一样,你也可以将它放在一个 table. 中
我没有遵循您的
TimeClock
结构。正如您所写,员工只能 in/clock 下班一次。当然他们会在星期二上班。CashAccountability
中的逻辑相同。每个员工只能负责一次提款。我认为你在这里寻找多对多关系,你应该研究如何实现这种数据结构。基本上,它允许CashAccountability
被 linked 给多个员工,一个员工被 linked 给多个CashAccountability
s.您可以指定部门领导,但无法显示领导下的员工。即没有 link 给下属的部门。
编辑:
我现在明白你的问题,为什么 Employee table 没有 3 列主键。主键是您想要的任何东西,但将与员工无关的事情作为员工中的一个人来参与是不合逻辑的 table ,尤其不是作为识别该人的主键。 WageID、TimeID 和 CashID 与员工本身无关,因此它们不应该在员工 table 中,当然也不应该在主键中。