如何在关系数据库中表示具有分层继承的类

时间:2016-04-28 21:36:41

标签: database

我有一个抽象类“Person”,它由(非抽象)类“Candidate”继承,后者有几个子类:保留候选人(面试),录取候选人......我怎样才能代表请问数据库?
谢谢

2 个答案:

答案 0 :(得分:1)

这是对继承的错误使用。一个人可能扮演候选人的角色,但并不总是一直都是候选人。使用成分。一个人扮演很多角色,其中一个可以成为候选人。他们以后可以成为一名雇员。而且他们的状态也不应该是一个子类型。使用"状态"专栏。

这样的事情:

create table people (
  person_id int primary key,
  name text,
  ...
);

create table person_roles (
  person_id int references people(person_id),
  type text check (type in ('Candidate', '...') ),
  candidate_status text check (candidate_status in ('Retained','Admitted') ),

  primary key (person_id, type)
);

正确使用继承将是Person extends AbstractLegalParty。组织或公司也会扩展AbstractLegalParty。

答案 1 :(得分:0)

如果没有很多数据项,只需创建一个带有类型字段的表。如果有很多列或变体,请为变体创建表并将它们链接到主表。