sql – 递归关系的数据库设计
考虑这种情况,我正在尝试为公司建立一个数据库:
实体:员工,经理,部门. 现在我有两种方法建模: 第一个解决方案: 考虑到我会保留管理员所特有的数据(例如,奖金和状态),我认为经理实体继承于员工实体. >由于部门和员工之间的关系是1:N,那么我会把 问题:如何表示经理和员工之间的递归关系? 第二个解决方案: 我认为不需要经理实体,因为其他员工也可能拥有奖金和状态. (实际上,我添加了这两个属性,只是为了看看如何在两种情况下建模) >由于部门和员工之间的关系是1:N,那么我会把 问题:我如何表示经理和部门之间的关系? 问题: >两种设计都有明显的错误吗? 解决方法我可能会像以下一样:该型号具有以下特点: >经理“继承”员工. >要表示员工,请在EMPLOYEE中插入一行. >部门可以有多名员工. >主管可以在受监督的员工的不同部门工作. 注意:如果您的DBMS不支持延迟约束,则需要使DEPARTMENT.MANAGER_ID为空,以打破否则将阻止您插入新数据的循环. 如果部门需要匹配,那么您将采用DBMS特定技术(例如触发器或“特殊”约束),或者将DEPARTMENT_ID“传播”到员工的PK中.这种传播最终能够匹配: 由于EMPLOYEE_ID必须是全局唯一的,所以它不能与DEPARTMENT_ID一起保留在组合键中.所以,我们使它成为备用键,而是使用PK中的代理EMPLOYEE_NO. 这种模式阻止您拥有管理一个部门并在另一个部门工作的经理,或监督来自不同部门的员工的主管. 如果你不熟悉符号… …它表示一个“类别”.在这种情况下,您可以简单地将其解释为EMPLOYEE和MANAGER之间的“1到0或1”关系. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |