【问题标题】:Employee Department Relationship in Database数据库中的员工部门关系
【发布时间】:2012-08-18 20:21:20
【问题描述】:

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

我设计了以下实体:

  • EmployeeID、Fname、Mname、Lname、Sex、电话、地址、入职日期等)
  • DepartmentID,姓名)

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

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

提前致谢

【问题讨论】:

标签: database-design relational


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    • 推迟循环 FK 之一(如果 DBMS 支持)。
    • 使Manager ID 可以为NULL。如果您需要支持无经理部门的概念,您可能还是需要这样做。

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


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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        不,如果员工愿意并且只能属于一个部门,我认为这没有必要,但是如果员工可以拥有多个部门,那么您可以继续……如果您愿意,请再考虑一下我认为可以保留员工的起止日期和离职日期

        【讨论】:

        • 是的.....omoabobade 是对的。虽然与复合主键(员工ID、部门ID)的关系是有效的,但这里根本不需要。
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-06
          • 2010-12-04
          • 2018-10-20
          • 1970-01-01
          • 2020-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多