数据库设计:很多关于自我引用FK的关系

时间:2015-01-14 13:37:30

标签: mysql database database-design foreign-keys

我可以使用经典的“employees”自引用表来演示我的问题,其中manager_id是与employee_id(PK)相关的FK。另一个表是“授权”。

如果授权仅与经理相关而非与非经理相关,该怎么办? 假设我创建了一个“管理员授权”的联结表,这个表是否可以连接到employees.manager_id,即使它不是唯一的?

或者我必须将经理与另一个表分开,即使他们与非经理人具有完全相同的属性吗?

1 个答案:

答案 0 :(得分:0)

看看这个结构Employees Structure。它管理一个复杂的情况(经理负责一个或多个部门),记录是历史记录(from_date,to_date)。

尝试修改此结构,如下所示:

  • 部门成为授权
  • dept_emp成为关联表auth_emp
  • 删除dept_manager

FK必须始终引用PK,因此无法通过manager_id将auth_emp连接到employee(想想空引用)。

是否将经理的员工分拆到另一个表中的决定取决于您的要求(想一想:当员工成为经理时?当至少另一个员工提到他时,员工是经理?)。

如果要强制在auth_emp中注册的employee_id引用管理器的约束,则可以在employee表上使用trigger。显然,触发逻辑取决于您的要求。