数据库中的员工部门关系

时间:2012-08-18 20:21:21

标签: database-design relational

我正在为SCM设计关系数据库(作为为企业设计信息系统的一部分)。但是当涉及到员工与其部门之间的关系时,我遇到了一些麻烦。

我设计了以下实体:

  • Employee ID ,Fname,Mname,Lname,Sex,Phone,Address,Hiring date,..等)
  • Department ID ,姓名)

由于关系是一对多的(每个员工都应该为 - 而且只有一个 - 部门,而每个部门都有很多员工),我在{{1}的属性中添加了Department ID }}。但问题是如何表示Employee关系(一对一)。

设计一个我们称之为的新关系是有效的:MANAGE它的属性是(Employee_manage_Department),其中两列都是主键的一部分吗?

提前致谢

5 个答案:

答案 0 :(得分:1)

是的,但由于公司员工的角色有限(生命)时间,我会添加两个新的DateTime列,DATE_FROM和DATE_TO,使DATE_FROM成为组合主键的一部分。

答案 1 :(得分:1)

由于经理 - 部门关系是1:1,您只需在部门表中添加Manager ID,该部门表将充当引用员工表的外键:

enter image description here

这引入了循环依赖,阻止了新数据的插入,可以通过以下方式之一解决:

  • 推迟其中一个循环FK(如果DBMS支持它)。
  • Manager ID无效。无论如何,如果您需要支持无经理部门的概念,您可能需要这样做。

顺便说一句,这允许部门由来自不同部门的员工管理。如果这是不合需要的,您将需要使用标识关系,以便相同的部门ID可以来回传播:

enter image description here


注意:单独的Employee_manage_Department表适用于建模M:N关系。

答案 2 :(得分:0)

Employee.department_id应该是foreign_key表的Department,并且是唯一且非空的。这符合您对One Employee has one departmentOne department can have many employees

的约束

答案 3 :(得分:0)

不,我不认为这是必要的,如果一个员工只能属于一个部门,但如果一个员工可以有一个以上的部门,那么你就可以继续...如果你愿意,可以再想一想保持工作人员的起点和退出日期,我认为你可以

答案 4 :(得分:0)

部门经理是否始终是在该部门工作的员工之一?如果答案是肯定的,那么Employee表中的布尔MnagerFlag就足够了。

您需要声明一个约束或强制执行一项规则,以防止某个depratment中的多个员工设置此标志。