1

我有一些表需要在 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。

如果我更新表 AB 中的 b_id,我希望它更新表 BC 中 x_id 匹配的 b_id。

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

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

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

希望这是有道理的。

是用触发器做到这一点的唯一方法吗?

4

1 回答 1

1

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

为了将表 AB 中的 b_id 更新到表 BC,您需要

  • 对包含 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 的外键引用。
于 2012-10-25T23:40:02.060 回答