SQL允许实体仅在满足特定要求时才参与关系

时间:2017-12-03 13:12:28

标签: sql oracle database-design

我有一个使用SuperPerson表和灾难表的练习超级英雄SQL数据库。 SuperPerson和Disaster,Create和Prevent之间有两种关系。 SuperPerson表有一个Disposition列,告诉我们它们是邪恶的还是好的。我怎样才能使得只有一个好的SuperPerson可以参与Prevent关系,反之亦然?#/ p>

我考虑创建两个引用SuperPerson表的新表SuperHero和SuperVillian,这是最合乎逻辑的事情,还是有一些我可以用来强制执行此约束的PL / SQL?

修改:Here's a link to a schema of the database so far

1 个答案:

答案 0 :(得分:1)

理想情况是将外键定义为:

add constraint fk_disaster_create
    foreign key (create, 'good') references superperson (superpersonid, disposition);

不幸的是,这些引用不允许使用常量。一种方法是使用两个值定义固定列:

alter table disaster add disposition_good varchar2(255) default 'good';
alter table disaster add disposition_evil varchar2(255) default 'evil';

alter table disaster add constraint fk_disaster_create
    foreign key (create, 'good') references superperson (superpersonid, disposition);