2010-01-29 83 views

回答

11

标记“未知”或缺失值很有用。

例如,如果您要存储人员,并且其中一个字段是他们的生日,则可以允许它为NULL来表示“我们不知道他何时出生”。

这与具有非空字段相反,对于相同类型的含义,您需要指定一个具有相同含义的“魔术值”。

例如,你应该在那个生日场中存储什么日期以表示“我们不知道他出生的时间”? 1970-01-01应该是那个魔法值?如果我们突然需要存储那天出生的人,该怎么办?

现在,话说回来,NULL是数据库设计和引擎中难以处理的问题之一,因为它是一个值的传播属性。

例如,什么是以下结果:

SELECT * 
FROM people 
WHERE birthday > #2000-01-01# 

SELECT * 
FROM people 
WHERE NOT (birthday > #2000-01-01#) 

(注意,上面的日期语法可能不会在任何数据库引擎是合法的,不要挂了就可以了)

如果你有很多有“未知”生日的人,也就是说。 NULL,它们不会出现在任何一个结果中。由于在上述两个查询中,第一个查询“所有标准为X的人”,第二个是“所有没有标准X的人”,因此您可以一起考虑这两个查询的结果会产生所有数据库中的人员。

但是,查询实际上是说“所有人都有已知和明确的标准X.”

这类似于问某人“我大于40岁吗?”另一个人说“我不知道”。如果你继续问“我是小于41岁?”,答案将是一样的,他仍然不知道。

此外,任何数学或比较将产生NULL为好。

例如,什么是:

SELECT 10 + NULL AS X 

结果是NULL,因为 “10 +不明” 仍是未知数。

6

Wikipedia

由 关系数据库模型,EF科德的创作者介绍, SQL空用来满足 要求所有真正的关系 数据库管理系统(RDBMS) 支持的“失踪 信息和不适用的 信息”

+0

哇,我很自豪我的答案是类似维基百科的答案=) – 2010-01-29 23:20:24

+0

据我了解,科德表示,任何关系数据库系统必须在处理缺失数据的系统方法。 NULL是这样的一种方式,但我不确定SQL NULL是否是Codd的心血结晶,即使维基百科这样说。 – 2018-02-07 14:58:07

1

表示它的S-像填充“我不知道”或“无关紧要”的列。例如,在一张客户列表中,如果他们没有填写他们的电话号码,那么您在电话号码字段中输入了什么内容?

+0

一个空字符串可以很好地满足这个目的。 – truppo 2010-01-29 23:21:54

+0

如果它是一个数字,一个真/假,或者如果一个空字符串本身有意义呢? – 2010-01-29 23:25:07

+0

电话号码不是数学意义上的数字。空字符串或其他无效像$$$ - $$$ - $$$$将工作,只要用户不能输入,就可以很容易地测试的默认值。 – 2010-01-29 23:26:36

0

表示缺乏任何价值。

NULL可用于在表中存储可选数据。假设你有一张车桌。并非所有汽车都有中继线......所以它们的TrunkSpace列可能是NULL

0

我喜欢JRL/Wikipedia的回答。当您不想将其默认为实际值时,有时需要填充NULL列。我的意思是,有时在使用varchar时可以使用空字符串而不是NULL。但是有点类型或日期类型呢?如果使用了一个位列,那么将其默认为0或1可能并不足够。对于日期类型,默认日期应该是多少?

还有一个原因,在某些系统中使用空值。 SQL Server 2008引入了sparse columns的概念,该概念优化了NULL值的存储。当你有一个可能大部分为空的列(或者大多数情况下为NULL)时,最好使用它们。

0

“它用于什么以及它有什么用处?”

它用于“解决”(和请注意引号),用缺少信息应对的问题。

这对创建软件设计问题和软件实现问题(其中最明显的一个可以概括为'(x == y)==!(x == y)')的狗屎负载很有用,或者换句话说:它对于声称空值是不可避免的程序员的狗屎负载创建作业安全性非常有用。

+0

它是有用的从无法提供实际解释的人产生无尽的咆哮因为他们的焦虑,也不是一个可行的选择,但该死的人有一个意见,不会让任何人忘记它。 -1。 – Aaronaught 2010-01-29 23:50:23

+1

可行的替代方案被称为“垂直分解”。 另一种选择是“如何使用专业化约束来处理缺失的信息”。 第三个是“多关系”。 我认为'(x == y)!=!(x == y)'的例子是一个非常神圣的实际解释。 – 2010-01-29 23:56:13

+0

对不起,应该是'(x == y)==!(x == y)' – 2010-01-30 00:00:49

0

请检查this question

“空”基本上意味着“没有值”,但也可以意味着“该值是未知的”,因此使得其旅游解说有时会产生歧义。想想一个人桌,既有出生日期,也有驾驶执照。如果出生日期的领域没有价值,这显然意味着日期不详(每个人都是这些日子里出生的......)。现在,如果驾驶执照字段没有任何价值,是否意味着该人没有驾驶执照,或者是否意味着其n#不知道?

0

它只是表示“遗漏值”或插入到数据库中的特定记录的时间“这是不知道值”。