2011-07-28 47 views
-1

是否有可能(在PostgreSQL中)作出一个约束,说列必须为空包含来自另一列中另一个表的值?换句话说,要将CHECK约束与FOREIGN KEY约束结合起来?约束来检查列是否为空或引用其他列?

我想定义的是该列应该为空包含来自另一列的值。这种情况下的目的是检查用户选择的语言是否在支持的语言列表中,或者未设置(保留为空)。

因此,一些在该行(不工作):

ALTER TABLE MyTable ADD CONSTRAINT my_constraint 
CHECK (languageCode IS NULL) OR (languageCode) REFERENCES Languages (languageCode) 
+3

只需创建外键并让该字段可以为空。外键的目标不能为空,但是源代码肯定可以。 –

+0

谢谢马克,它的工作原理也很简单:) –

回答

2

按MarcB的评论:外键约束在一个空的列会做你问什么。然而,通常情况下,强制执行'复杂'约束的最常见方式是用逻辑(返回一个布尔值)创建一个标量函数,然后检查该函数(传递要检查的值或表的PK ,或者任何适合你需要的东西)。