PostgreSQL-外键引用互斥表

PostgreSQL-外键引用互斥表,postgresql,Postgresql,我有三个数据库表:外星人、怪物和奖杯 每个外星人可以有多个奖杯。 每个怪物可以有多个奖杯。 每个奖杯必须有一个赢家(外星人异或怪物) 有没有一种方法可以让奖杯表中的外键引用外星人或怪物的主键 或者简单地有两个表更容易:一个外星人奖杯表和一个怪物奖杯表(即使它们是相同的)?您可以创建两个外键,并带有一个检查约束,其中一个为空: create table alien (id int primary key); create table monster (id int primary key); cr

我有三个数据库表:外星人、怪物和奖杯

每个外星人可以有多个奖杯。 每个怪物可以有多个奖杯。 每个奖杯必须有一个赢家(外星人异或怪物)

有没有一种方法可以让奖杯表中的外键引用外星人或怪物的主键


或者简单地有两个表更容易:一个外星人奖杯表和一个怪物奖杯表(即使它们是相同的)?

您可以创建两个外键,并带有一个检查约束,其中一个为空:

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)
);
create table alien(id int主键);
创建表怪物(id int主键);
创建表奖杯(id int主键,
外侨id int参考外侨(id),
怪物id int参考怪物(id),
检查(外星人id为空怪物id为空)
);

有什么原因不能创建一个包含外星人和怪物的玩家表,并加上一个指示玩家类型的标志?这是因为外星人和怪物(在服务器端应用程序中)的逻辑大不相同,并且它们有不同的字段。这就是我现在一直在做的事情,但我想知道是否有一种方法可以将一个字段引用到两个不同的表中。