具有条件的PostgreSQL外键

时间:2012-10-25 02:58:59

标签: postgresql

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

table_a:
  id

table_b:
  id
  foreign_key_on_table_a_id

table_a会有一个列表,table_b与table_a有关,但是有外键约束。即使table_a中没有id为0,我也希望它允许值为0。

这是正确的约束吗?如果没有将值添加到table_a中,还有其他/更好的方法吗?

1 个答案:

答案 0 :(得分: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是一个巨大的kludge。