PostgreSQL - 外键引用互斥表

时间:2015-05-07 22:14:36

标签: postgresql

我有三个数据库表:ALIENS,MONSTERS和TROPHIES。

每个ALIEN可以有多个TROPHIES。 每个MONSTER都可以有多个TROPHIES。 每个TROPHY必须只有一个WINNER(ALIEN XOR MONSTER)。

有没有办法让TROPHY表中的外键引用ALIEN或MONSTER的主键?

或者简单地使用两个表更容易:ALIEN_TROPHY表和MONSTER_TROPHY表(即使它们是相同的)?

1 个答案:

答案 0 :(得分:1)

您可以使用检查约束创建两个外键,该约束表明其中一个是空的:

create table alien (id int primary key);
create table monster (id int primary key);
create table trophy (id int primary key,
    alien_id int references alien(id),
    monster_id int references monster(id),
    check (alien_id is null <> monster_id is null)
);
相关问题