gpt4 book ai didi

postgresql - 在 postgresql 中没有外键的更新级联

转载 作者:行者123 更新时间:2023-11-29 13:35:36 26 4
gpt4 key购买 nike

我有一些表需要在 postgresql 中级联更新,但我不认为我可以使用外键来完成它。

简单的版本是我有 4 个对象表和 2 个绑定(bind)表:

Table X    Table A       Table A-B      Table B      Table B-C    Table C
------- -------- --------- ------- --------- -------
x_id a_id x_id b_id x_id c_id
... ... a_id ... b_id ...
... ... b_id ... c_id ...
... ...

在我的绑定(bind)表上,我在所有 id 字段(x_id、a_id、b_id)、(x_id、b_id、c_id)上都有一个 PK。

如果我更新表 A-B 中的 b_id,我希望它更新表 B-C 中 x_id 匹配的 b_id。

如果我尝试创建外键约束,它会告诉我

“没有唯一约束与引用表的给定键匹配...”

我知道它没有这样做,因为 (x_id,b_id) 不是唯一约束,但它不可能是,因为我将有多个 c_id 具有相同的 b_id 和 x_id。

希望这是有道理的。

是使用触发器执行此操作的唯一方法吗?

最佳答案

I understand that it's not doing that because(x_id,b_id) isn't a unique constraint, but it can't be, because I'll have multiple c_id's with the same b_id and x_id.

为了将表 A-B 中的 b_id 更新级联到表 B-C,您需要

  • 对包含 Table_A-C.b_id 的某些列集的唯一约束,
  • Table_B-C 中的同一组列,以及
  • Table_B-C 中的外键引用引用 Table_A-C 中的同一组列,具有 ON UPDATE CASCADE。

我不清楚您当前的结构是否可行。

如果

  • Table_A-B.x_id是一个自增整数,它本身是唯一的,那么
  • 在 Table_A-B 中,列集 {x_id, b_id} 也将是唯一的,并且
  • 在Table_B-C中,列x_id为整数(或bigint),则
  • 在 Table_B-C 中,列集 {x_id, b_id} 可以具有对 Table_A-C 的外键引用。

关于postgresql - 在 postgresql 中没有外键的更新级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com