NULL是记录中适用的已知非值的适当值吗? (即该值已知为“无价值”)

时间:2011-07-04 00:12:28

标签: sql sql-server null

Wikipedia says NULL用于表示“缺少信息和不适用的信息”。

我始终认为NULL不适合代表“未知”信息,因为该字段适用于记录,它只是一个未知值。

鉴于NULL引入查询的问题(3点逻辑和大量必须考虑的异常),对于的字段,仍应在NULL记录中使用NULL适用于记录?或者它应该仅用于给定记录的值未知的适用字段?

2 个答案:

答案 0 :(得分:2)

我也接受null表示“未知”,但“不适用”适用于例如在保存CEO的员工记录时,我们设置employee_manager_id = null,因为CEO 否管理器。

避免空值麻烦的一种技巧是使用特殊值,例如为person.age保存-1,但是检查此值时会有更多的复杂性。当为外键使用特殊值时(如在管理器id示例中),您实际上必须创建id = 0的虚拟记录,这可能会在处理“所有员工”时引入问题 - 您必须跳过虚拟对象记录。

就个人而言,我认为只使用null并且遭受更复杂SQL的麻烦,事情会更加清晰 - 至少每个人都知道发生了什么。

答案 1 :(得分:1)

事实上,Null并不意味着“未知”,只是“没有数据”。它在SQL(和其他环境)中使用,其中对于给定字段,数据根本不存在。

关于您对三点逻辑和异常的关注,您的应用程序可能正在使用更多语言而不仅仅是sql。与SQL接口的系统代码应该处理如何处理Null字段的问题。

如果Null是不可接受的(即你没有非空值的数据结构),那么你最好完全避免“未知”“无数据”的概念。通过将SQL列的Null值设置为false来创建所需的字段;这使得Null无法作为有效值输入。 E.g。

CREATE TABLE foo (bar INT NOT NULL);