【问题标题】:Set one column in a table as foreign key to two target tables将表中的一列设置为两个目标表的外键
【发布时间】:2017-12-12 12:41:17
【问题描述】:

我在 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

最好的方法是什么?

【问题讨论】:

    标签: database postgresql reference foreign-keys cascade


    【解决方案1】:

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

    阅读chapter Caveats in the manual,以声明结尾:

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

    准确解决您的问题。

    如果您需要像这样强制执行参照完整性的 FK 约束,则必须放弃继承。您可以将table1 作为“主”表,在其id 列中保存完整的键空间。并且userschannel 有它们各自的id 作为table1.id 的FK。

    可能在table1 中添加一个type 列,在userschannel 中添加一个(冗余)type 列,并使用多列FK 约束,这样users 中的行只能引用类型“用户”在table1

    您想要的 FK 约束可能只是:

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

    相关:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2017-06-14
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多