postgresql中无外键的更新级联
我有一些表需要在postgresql中进行级联更新,但我认为我不能使用外键来完成 简单的版本是我有4个对象表和2个绑定表: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
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的外键引用
- 对某些列集(包括表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的外键引用