使用哪一个或哪一个更好?有什么区别吗?
searchtype_id bigint NOT NULL
要么
CONSTRAINT searchtype_id_nn CHECK ((searchtype_id IS NOT NULL))
有区别吗?是。 NOT NULL
是列类型的存储定义的一部分。那么,NOT NULL
会影响值的存储方式(需要NULL
-flag吗?)。在查询的编译阶段,NOT NULL
定义也可用于优化。
相比之下,CHECK
约束确实证实数据满足某些特征,但在编译阶段不太可能使用此信息。
NOT NULL
定义早于CHECK
约束,并且是所有数据库的标准。
NULL-ability是我认为属于该类型的一部分 - 因为它是语言中内置的声明,表示“此列需要具有值”。可以采用NULL
值的整数列与不能的整数列略有不同。
我建议使用NOT NULL
语法而不是CHECK
约束。它为数据库提供了有关该列的更多信息。
两者都是不同的,很难在它们之间进行选择,因为有些东西适用于一个而有些则不适用于其他类似NOT NULL约束只能在内联声明,而CHECK约束可以应用于外部约束。如果我必须在其中一个之间做出选择,我会选择外线: