Son*_*ngo 20 sql database database-design erd data-modeling
考虑这种情况,我正在尝试为公司建模数据库:
Employees,Managers,Departments.Employee只有1作品Department而Department可能有许多Employees在它的工作.Manager可以只管理1个Department,类似的Department可能只有1个Manager.Manager监督很多Employees,但一个Employee只由一个监督Manager.现在我有两种方法来模拟这个:
第一解决方案
我会考虑Manager实体继承Employee实体,考虑到我将保留管理者独有的数据(例如奖金和状态).
由于之间的关系Department,并Employee为1:N后来我就把这
Department Id作为一个外键Employee表的Works
关系.
由于之间的关系Department,并Manager为1:1后来我就把这
Department Id作为一个外键Manager表的Manages
关系.
问题:我如何表示Manager和之间的递归关系Employee?
二解决方案:
我认为Manager不需要实体其他Employees还可能有Bonus和Status.(实际上我添加了这两个属性只是为了看看如何在两种情况下对其进行建模)

Department,并Employee为1:N后来我就把这
Department Id作为一个外键Employee表的Works
关系.Employee,并Manager为1:N后来我就把这
Employee Id作为一个外键Employee表的Supervises
关系,并调用它Manager Id.问题:我怎样才能代表Manager和Department?之间的关系?
问题:
Bra*_*vic 26
我可能会选择以下内容:

该模型具有以下特征:
注意:如果您的DBMS不支持延迟约束,您将需要使DEPARTMENT.MANAGER_ID为NULL,以打破否则会阻止您插入新数据的循环.
如果要求部门匹配,那么您要么采用DBMS特定的技术(例如触发器或"特殊"约束),要么将DEPARTMENT_ID"传播"到员工的PK中.这种传播最终实现了匹配:

由于EMPLOYEE_ID必须是全局唯一的,因此它不能与DEPARTMENT_ID一起保留在组合键中.因此,我们将其替换为密钥,而是使用PK中的代理EMPLOYEE_NO.
此模型可以防止您拥有管理一个部门并在另一个部门工作的经理,或者监督来自不同部门的员工的主管.
如果你不熟悉这个符号......

......它表示"类别".在这种情况下,您可以简单地将其解释为EMPLOYEE和MANAGER之间的"1到0或1"关系.