数据库设计:自引用 FK 的多对多关系

Database design: many2many relationship for self referencing FK

我的问题可以使用经典的 "employees" 自引用 table 来证明,其中 manager_id 是与 employee_id (PK) 相关的 FK。另一个 table 是 "authorizations".

如果授权只与经理相关而不与非经理相关怎么办? 假设我创建了 "manager authorizations" 的连接点 table,这个 table 是否可以连接到 employees.manager_id,即使它不是唯一的?

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

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

尝试修改这个结构如下:

  • 部门成为授权
  • dept_emp 变成联想 table auth_emp
  • 删除 dept_manager

FK 必须始终引用 PK,因此不可能通过 manager_id 将 auth_emp 连接到员工(考虑空引用)。

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

如果您想要强制限制 employee_id 在 auth_emp 中注册的人指的是经理,您可以对员工 table 使用触发器。显然,触发逻辑取决于您的要求。