我在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
最好的方法是什么?
答案 0 :(得分:1)
不可能。这是Postgres继承的已知限制。
阅读chapter Caveats in the manual,其结束语:
这种情况没有好的解决方法。
准确处理您的案件。
如果您需要强制执行参照完整性的FK约束,则必须放弃继承。你可以将table1
作为"主人"在其id
列中保存完整密钥空间的表。 users
以及channel
各自id
为FK至table1.id
。
可能会将type
列添加到table1
,type
和users
中的(冗余)channel
列,并使用多列FK约束,以便users
中的行只能引用类型" user"在table1
等等
您所需的FK约束可能就是:
FOREIGN KEY (account_id) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE CASCADE
相关: