【问题标题】:Database design: many2many relationship for self referencing FK数据库设计:自引用FK的many2many关系
【发布时间】:2015-01-14 13:37:30
【问题描述】:

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

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

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

【问题讨论】:

  • 无需将经理分开到另一个表中。
  • 那么管理者和授权应该是什么关系呢?

标签: mysql database database-design foreign-keys


【解决方案1】:

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

尝试如下修改这个结构:

  • 部门变成授权
  • dept_emp 成为关联表 auth_emp
  • 删除部门经理

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

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

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

【讨论】:

  • 假设非经理永远无法成为经理(因为我的情况与员工/经理不同,我只是为了简单起见而举了这个例子)。所以你建议将employees.emp_id连接到auth_emp.emp_id,即使有很多没有任何授权的员工?
  • auth_emp.emp_id 必须连接到 employees.emp_id。将其连接到 employees.manager_id 不是一个好策略,并且在某些数据库中是不允许的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多