1

使用 postgres sql,有没有办法在外键上设置一个条件,该条件仅限于另一个表,如普通外键约束,但也允许 0 的值存在而不存在于另一个表中。例如:

table_a:
  id

table_b:
  id
  foreign_key_on_table_a_id

table_a 将有一个事物列表,并且 table_b 与 table_a 相关,但具有外键约束。即使 table_a 中没有 0 的 id,我也希望它允许值为 0。

这是使用正确的约束吗?是否有另一种/更好的方法可以在不将值添加到 table_a 的情况下执行此操作?

4

1 回答 1

2

我会更改foreign_key_on_table_a_id为允许 NULL 值。然后像往常一样使用 FK 并将 NULL 放在那里而不是零。您可以在引用另一个表的列中具有 NULL。

或者,您可以编写一个函数,如果值在另一个表中,则返回 true,否则返回 false,然后添加 CHECK 约束:

CHECK (your_column = 0 or the_function(your_column))

不过,对于 FK,您不会得到任何通常的级联行为,而且这个 CHECK 是一个巨大的组合。

于 2012-10-25T03:34:07.763 回答