我有一个带有 SuperPerson 表和 Disaster 表的练习 Super Hero SQL 数据库。 SuperPerson 和 Disaster 之间有两种关系,Create 和 Prevent。 SuperPerson 表有一个 Disposition 列,告诉我们他们是邪恶的还是善良的。我怎样才能做到只有好的 SuperPerson 才能参与 Prevent 关系,反之亦然才能参与 Create 关系?
我考虑过创建两个引用 SuperPerson 表的新表 SuperHero 和 SuperVillian,这是最合乎逻辑的做法还是有一些 PL/SQL 可用于强制执行此约束?
最佳答案
理想的做法是将外键定义为:
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 允许实体仅在满足特定要求时才参与关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47618728/