我有一个带有SuperPerson表和Disaster表的练习Super Hero SQL数据库。 SuperPerson与“灾难”,“创建”和“防止”之间存在两种关系。 SuperPerson表的“处置”列告诉我们它们是邪恶还是善良。我该如何做才能使只有良好的SuperPerson才能参与“防止”关系,反之亦然,就可以创建“创建”关系?

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

编辑:Here's a link to a schema of the database so far

最佳答案

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

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);

关于sql - SQL允许实体仅在满足某些要求时才参与关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47618728/

10-11 04:48