我有一个抽象类“Person”,它由(非抽象)类“Candidate”继承,后者有几个子类:保留候选人(面试),录取候选人......我怎样才能代表请问数据库?
谢谢
答案 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)
如果没有很多数据项,只需创建一个带有类型字段的表。如果有很多列或变体,请为变体创建表并将它们链接到主表。