postgresql中无外键的更新级联

postgresql中无外键的更新级联,postgresql,sql-update,cascade,Postgresql,Sql Update,Cascade,我有一些表需要在postgresql中进行级联更新,但我认为我不能使用外键来完成 简单的版本是我有4个对象表和2个绑定表: Table X Table A Table A-B Table B Table B-C Table C ------- -------- --------- ------- --------- ------- x_id a_id x_id

我有一些表需要在postgresql中进行级联更新,但我认为我不能使用外键来完成

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

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        ...
                            ...                         ...
在我的搭售表上,我在所有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

希望这是有道理的

只有使用触发器才能做到这一点吗

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

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

  • 对某些列集(包括表a-C.b_id)的唯一约束
  • 表B-C中的同一组列,以及
  • 表_B-C中的外键引用,引用表_a-C中的同一组列,带有更新级联
我不清楚在你目前的结构下这是否可能

如果

  • 表_A-B.x_id是一个自动递增的整数,它本身是唯一的,那么
  • 在表A-B中,{x_id,B_id}列的集合也是唯一的,并且
  • 在表_B-C中,列x_id是一个整数(或bigint),然后
  • 在表_B-C中,{x_id,B_id}列的集合可以有表_a-C的外键引用
我知道它没有这样做,因为(x_id,b_id)不是a 唯一约束,但不能是,因为我将有多个c_id 使用相同的b_id和x_id

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

  • 对某些列集(包括表a-C.b_id)的唯一约束
  • 表B-C中的同一组列,以及
  • 表_B-C中的外键引用,引用表_a-C中的同一组列,带有更新级联
我不清楚在你目前的结构下这是否可能

如果

  • 表_A-B.x_id是一个自动递增的整数,它本身是唯一的,那么
  • 在表A-B中,{x_id,B_id}列的集合也是唯一的,并且
  • 在表_B-C中,列x_id是一个整数(或bigint),然后
  • 在表_B-C中,{x_id,B_id}列的集合可以有表_a-C的外键引用