Answers:
在大多数NOT NULL
数据库中,出于您陈述的原因,列在存储数据方面将更加高效,并且查询和索引也将更加高效-因此,除非您想在列中允许NULL,否则应明确禁止它们。
这将对性能产生轻微的影响,因为NOT NULL
可能会对使用任何INSERT或UPDATE影响的每一行都检查额外的约束,但是由于大多数数据库都是相对轻量级和重载型的,因此这可能不是问题(稍无论如何,额外花费的时间不太可能会引起注意,因为这是CPU绑定的操作,其余的插入/更新操作将是IO绑定的,因此是一个更为重要的瓶颈),它为您提供了一些“免费”数据检查,这样您的代码(或其他人的代码)就不会在其他代码不期望使用NULL的地方意外插入NULL,因此在它们存在的情况下可能会给出错误的结果。
编辑:正如彼得在他的评论中指出的那样,上述内容是一种普遍性,可能并不适用于所有 DMBS,尽管我很确定它适用于mysql和mssql。该领域的其他复杂情况可能包括稀疏表之类的功能(例如,已实施的MSSQL 2008),这些功能将改变(不可空)列的性能动态。
您应该让您的架构设计和应用程序需求指导这一决定。在大多数情况下,两种方法的性能差异可能都不明显。
NULL
仅当该NULL
值对要建模的事物有解释时,才应允许。