约束检查列是否为空或引用其他列?

时间:2011-07-28 16:58:10

标签: sql postgresql constraints

是否有可能(在PostgreSQL中)制作一个约束,指出列必须为null 包含另一个列的值,在另一个表中?换句话说,要将CHECK约束与FOREIGN KEY约束组合?

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

所以有些内容(不起作用):

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

1 个答案:

答案 0 :(得分:2)

根据MarcB的评论:NULLable列上的外键约束将完全按照你的要求进行。

但是,一般来说,强制执行“复杂”约束的最常用方法是使用逻辑(返回布尔值)和CHECK函数创建标量函数(传入要检查的值或表的PK,或任何适合您需要的东西)。