使用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中,还有其他/更好的方法吗?
答案 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。