将表中的一列设置为两个目标表的外键

时间:2017-12-12 12:41:17

标签: database postgresql reference foreign-keys cascade

我在PostgreSQL 9.6中有3个表:

**table1 :** {id( primary key) ,account_id}
**users  :** {id( primary key)} INHERITS (common_table);
**channel:** {id( primary key)} INHERITS (common_table);

我想要这样的事情:

FOREIGN KEY(account_id)REFERENCES(users(id)OR channel(id))ON UPDATE CASCADE ON DELETE CASCADE

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

不可能。这是Postgres继承的已知限制。

阅读chapter Caveats in the manual,其结束语:

  

这种情况没有好的解决方法。

准确处理您的案件。

如果您需要强制执行参照完整性的FK约束,则必须放弃继承。你可以将table1作为"主人"在其id列中保存完整密钥空间的表。 users以及channel各自id为FK至table1.id

可能会将type列添加到table1typeusers中的(冗余)channel列,并使用多列FK约束,以便users中的行只能引用类型" user"在table1等等

您所需的FK约束可能就是:

FOREIGN KEY (account_id) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE CASCADE

相关: