Database design 什么是数据库空字段?

Database design 什么是数据库空字段?,database-design,Database Design,有人能解释一下NULL在数据库表中的用法吗?它的用途和用途是什么?来源: 由项目的创建者介绍 关系数据库模型,E.F.Codd, SQL Null用于实现 要求所有真实的关系 数据库管理系统(RDBMS) 支持“失踪”的表示 信息和不适用 信息“ 这有点像一个写着“我不知道”或“没关系”的专栏。例如,在客户表中,如果他们没有填写电话号码,您会在电话号码字段中输入什么?表示没有任何值 NULL可用于在表中存储可选数据。假设你有一张汽车桌。并非所有的汽车都有行李箱……因此它们的行李箱空间列可能为NU

有人能解释一下
NULL
在数据库表中的用法吗?它的用途和用途是什么?

来源:

由项目的创建者介绍 关系数据库模型,E.F.Codd, SQL Null用于实现 要求所有真实的关系 数据库管理系统(RDBMS) 支持“失踪”的表示 信息和不适用 信息“


这有点像一个写着“我不知道”或“没关系”的专栏。例如,在客户表中,如果他们没有填写电话号码,您会在电话号码字段中输入什么?

表示没有任何值

NULL
可用于在表中存储可选数据。假设你有一张汽车桌。并非所有的汽车都有行李箱……因此它们的行李箱空间列可能为
NULL

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

例如,如果您正在存储人员,其中一个字段是他们的生日,您可以允许它为
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+未知”仍然未知。

我喜欢JRL/Wikipedia的答案。有时,当您不想将列默认为实际值时,最好用NULL填充该列。我的意思是,在使用varchar时,有时可以使用空字符串而不是NULL。但是比特或日期类型呢?如果使用位列,则将其默认为0或1可能并不足够。日期类型的默认日期应该是什么

在某些系统中使用空值还有一个原因。SQL Server 2008引入了具有针对空值的优化存储的概念。当您的列可能大部分为空(或者准确地说,大部分为空)时,最好使用它们。

“它用于什么以及如何使用?”

它用于“解决”(请注意引号)处理缺失信息的问题

它有助于创建软件设计问题和软件实现问题(其中最明显的一个问题可以概括为“(x==y=!(x==y)”)的垃圾负载,或者换句话说:它有助于为声称空值不可避免的程序员的垃圾负载创建工作安全。

请检查


“空”基本上是指“没有价值的”,但也可以是指“未知的价值”,因此其解释有时模棱两可。设想一个person表,其中包含出生日期和驾驶执照n#字段。如果“出生日期”字段没有值,这显然意味着日期未知(每个人都是在某一天出生的…)。现在,如果驾驶执照字段没有任何值,这是否意味着此人没有驾驶执照,还是意味着其n#未知

它只是表示在为特定记录插入数据库时的“缺失值”或“未知值”。

哇,我很自豪我的答案与wikipedia answer=)据我所知,Codd指出,任何关系数据库系统都必须有一种处理缺失数据的系统化方法。NULL就是这样一种方式,但我不确定SQL NULL是否是Codd的创意,即使Wikipedia这么说。一个空字符串可以很好地满足这个目的。如果它是一个数字,一个真/假,或者一个空字符串本身有意义怎么办?电话号码不是数学意义上的数字。空字符串或类似$$-$$-$$$$的其他无效字符串将与默认值一样工作,只要用户不能将其输入,就可以轻松测试。$$-$$-$$$是一个有趣的选择。我更喜欢空值。这将是完全奇怪的-通常是一个糟糕的做法。。。我在一个案例中提出了一个数字,有一个专栏,比如客户余额,或者任何与金钱有关的东西,这对于那些既不能为焦虑提供切实可行的解释,也不能提供可行的替代方案,但他妈的有自己的观点,并且不会让任何人忘记它的人来说是非常有用的-1.可行的替代方案称为“垂直分解”。另一种选择是“如何通过约束专门化来处理缺少的信息”。第三个是“多元关系”。我考虑的例子是(x==y)=!(x==y)“这是一个非常实际的解释。对不起,应该是”(x)