4

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

我设计了以下实体:

  • Employee( ID , Fname , Mname , Lname , Sex , Phone , Address , Hiring date , .. etc )
  • Department身份证,姓名)

并且由于关系是一对多的(每个员工都应该为 - 并且只有一个 - 部门工作,而每个部门都有很多员工),我添加Department IDEmployee. 但问题是如何表示MANAGE关系(一对一)。

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

提前致谢

4

5 回答 5

2

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

于 2012-08-18T20:29:53.703 回答
1

由于经理与部门的关系是 1:1,您可以简单地将 a 添加Manager ID到部门表中,这将充当引用员工表的外键:

在此处输入图像描述

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

  • 推迟循环 FK 之一(如果 DBMS 支持它)。
  • 使Manager IDNULL-able。如果您需要支持无经理部门的概念,您可能无论如何都需要这样做。

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

在此处输入图像描述


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

于 2012-08-19T04:23:43.770 回答
0

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

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

于 2012-08-19T09:59:17.843 回答
0

不,我不认为这是必要的,如果员工将并且只能属于一个部门,但如果员工可以拥有多个部门,那么你可以继续......如果你想保留工作人员的从和离职日期我认为你可以

于 2012-08-18T20:29:54.930 回答
0

Employee.department_id应该是foreign_key表的aDepartment并且是唯一且非空的。这满足你的约束One Employee has one departmentOne department can have many employees

于 2012-08-18T20:25:49.020 回答