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

标签 sql oracle database-design

我有一个带有 SuperPerson 表和 Disaster 表的练习 Super Hero SQL 数据库。 SuperPerson 和 Disaster 之间有两种关系,Create 和 Prevent。 SuperPerson 表有一个 Disposition 列,告诉我们他们是邪恶的还是善良的。我怎样才能做到只有好的 SuperPerson 才能参与 Prevent 关系,反之亦然才能参与 Create 关系?

我考虑过创建两个引用 SuperPerson 表的新表 SuperHero 和 SuperVillian,这是最合乎逻辑的做法还是有一些 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 允许实体仅在满足特定要求时才参与关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47618728/

相关文章:

mysql - 复杂查询,许多连接

sql - 在 MySQL 中选择随机行

sql - 在不可连接的列上右连接

sql - 如何处理相互依赖的插入

mysql - 如何同时存储旧的和新的更新值?

sql - 如何选择 FK 作为 header 名称和值作为这些值的列表?

mysql - SQL计算另一个表中的行并加入

java - Calendar.getInstance() 的奇怪问题

java - H2数据库是否兼容Oracle 'Insert All'语句?

database - 正确地将表放入 4NF?