【问题标题】:Recursive association with inheritance与继承的递归关联
【发布时间】:2017-05-05 02:18:16
【问题描述】:

如果我继承的表有递归关联,外键是指向该表的主键还是父表?

在我的场景中:

  • Person 继承 Employee。
  • 员工可以管理 0:很多员工,一个员工可以有 1 个经理。 (递归关联)。

此表是否正确,或者第二个约束是否应该引用 Person(person_id)?

create table Employee(
  person_id int not null,
  salary float not null,
  etype varChar(25) not null,
  manager_id int not null,
  dept_id int not null,

  primary key(person_id),
  constraint fkemp foreign key(person_id) references Person(person_id),
  constraint fkmanager foreign key(manager_id) references Employee(person_id),
  constraint fkdept foreign key(dept_id) references Department(dept_id),
);

CEO 也没有人管理他,这是否意味着我需要牺牲我的数据完整性并允许空值?

【问题讨论】:

    标签: sql database database-design


    【解决方案1】:

    我认为表格是正确的。出于层次结构的目的,经理是Employees(他们的People属性在这里并不真正相关)。

    其次,您可以使manager_id 可以为空,并且不会损害您的数据完整性。显然,在某些情况下,员工没有经理(即 CEO),因此允许 manager_id 为空并不是任何形式的逻辑违规。

    如果这让您感觉更安全,您可以在Employee 表中添加一个is_manager bit not null 列,然后有一个约束,如果is_manager 为真,则只允许空manager_id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多