Database design 数据库中的员工-部门关系

Database design 数据库中的员工-部门关系,database-design,relational,Database Design,Relational,我正在为SCM设计一个关系数据库(作为为企业设计信息系统的一部分)。但是当谈到员工和部门之间的关系时,我遇到了一些麻烦 我设计了以下实体: Employee(ID、Fname、Mname、Lname、性别、电话、地址、聘用日期等) 部门(ID,姓名) 由于这种关系是一对多的(每个员工都应该为一个部门工作,而且只有一个部门,而每个部门都有很多员工),我在员工的属性中添加了部门ID。但问题是如何表示管理关系(一对一) 设计一个新的关系是否有效,我们称之为:Employee\u manage\u

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

我设计了以下实体:

  • Employee
    ID、Fname、Mname、Lname、性别、电话、地址、聘用日期等)
  • 部门
    ID,姓名)
由于这种关系是一对多的(每个员工都应该为一个部门工作,而且只有一个部门,而每个部门都有很多员工),我在
员工的属性中添加了
部门ID
。但问题是如何表示
管理
关系(一对一)

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


提前感谢

员工。部门id
应该是
部门
表的
外键
,并且是唯一且非空的。这满足了您的约束条件,即一名员工有一个部门
一个部门可以有多名员工
是的,但由于员工在公司中的角色(生命)时间有限,我将添加两个新的日期时间共谋,DATE_FROM和DATE_TO,从组成的主键的一部分生成日期。

不,如果一名员工将且只能属于一个部门,我认为这不是必要的,但是如果一名员工可以拥有多个部门,那么您可以继续。。。再想一想,如果您想保留员工的起始日期和离职日期,我认为您可以

因为经理与部门的关系是1:1,您只需向部门表添加一个
经理ID
,它将充当引用员工表的外键:

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

  • 延迟其中一个循环FK(如果DBMS支持)
  • 使
    Manager ID
    NULL可为空。如果你需要支持无经理部门的概念,你可能无论如何都需要这样做
顺便说一句,这允许一个部门由来自不同部门的员工管理。如果不希望这样,则需要使用标识关系,以便相同的部门ID可以来回传播:



注:单独的
Employee\u manage\u Department
表适用于建模M:N关系。

部门经理是否总是在该部门工作的员工之一?如果答案是“是”,则Employee表中的布尔MnagerFlag就足够了


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

是…..OMABOBADE是正确的。虽然与复合主键(员工ID、部门ID)的关系是有效的,但这里根本不需要它。