我正在为SCM设计关系数据库(作为为企业设计信息系统的一部分)。但是当涉及到员工与其部门之间的关系时,我遇到了一些麻烦。
我设计了以下实体:
Employee
( ID ,Fname,Mname,Lname,Sex,Phone,Address,Hiring date,..等)Department
( ID ,姓名)由于关系是一对多的(每个员工都应该为 - 而且只有一个 - 部门,而每个部门都有很多员工),我在{{1}的属性中添加了Department ID
}}。但问题是如何表示Employee
关系(一对一)。
设计一个我们称之为的新关系是有效的:MANAGE
它的属性是(Employee_manage_Department
),其中两列都是主键的一部分吗?
提前致谢
答案 0 :(得分:1)
是的,但由于公司员工的角色有限(生命)时间,我会添加两个新的DateTime列,DATE_FROM和DATE_TO,使DATE_FROM成为组合主键的一部分。
答案 1 :(得分:1)
由于经理 - 部门关系是1:1,您只需在部门表中添加Manager ID
,该部门表将充当引用员工表的外键:
这引入了循环依赖,阻止了新数据的插入,可以通过以下方式之一解决:
Manager ID
无效。无论如何,如果您需要支持无经理部门的概念,您可能需要这样做。顺便说一句,这允许部门由来自不同部门的员工管理。如果这是不合需要的,您将需要使用标识关系,以便相同的部门ID可以来回传播:
注意:单独的Employee_manage_Department
表适用于建模M:N关系。
答案 2 :(得分:0)
Employee.department_id
应该是foreign_key
表的Department
,并且是唯一且非空的。这符合您对One Employee has one department
和One department can have many employees
答案 3 :(得分:0)
不,我不认为这是必要的,如果一个员工只能属于一个部门,但如果一个员工可以有一个以上的部门,那么你就可以继续...如果你愿意,可以再想一想保持工作人员的起点和退出日期,我认为你可以
答案 4 :(得分:0)
部门经理是否始终是在该部门工作的员工之一?如果答案是肯定的,那么Employee表中的布尔MnagerFlag就足够了。
您需要声明一个约束或强制执行一项规则,以防止某个depratment中的多个员工设置此标志。