表字段中的NULL比空字段好吗?

时间:2010-04-28 11:03:35

标签: mysql database-design

我想知道在没有值的字段中是否应该为NULL,还是应该为空?

什么是最好的?

感谢

5 个答案:

答案 0 :(得分:8)

NULL表示没有设置数据,而空字符串可能是一些有效数据。

因此,使用NULL可以帮助您区分这两种情况。

答案 1 :(得分:2)

从编程的角度来看,我尝试不允许空值,原因有几个。其中之一是代码通常对意外的NULL值有不良反应。如果查询过滤器运行得更快,检查空值我可能会考虑使用它们,但没有证据证明我已经经历过这种情况。但是我经历过许多函数,这些函数在进行某种比较之前没有考虑过,而是先测试NULL。

答案 2 :(得分:1)

有一个论点,你绝不应该在你的数据中允许NULL,如果你用它来表明你不知道该值应该是什么,或者你只是没有那些数据然后使用字段中的显式值以指示这些状态。类似地,'空'字段。也就是说,我认为每个人都做到了或已经做到了,并且可能再做一次。 NULL具有奇怪的比较属性,这就是为什么它总是最好的,如果可以的话,为了避免它并且具有缺失数据状态的显式值。

答案 3 :(得分:1)

当三个有价值的逻辑可能会回来咬你时,避免在基表中出现NULL。这很容易说,但很难解释。有时可以成功管理三值逻辑,但您的直觉可能基于两个有价值的逻辑,并且可能会产生误导。

如果您在基表中避免使用NULLS,但使用外连接创建视图或查询,请准备好处理NULLS。 NULLS在从未在where子句中使用过的字段中,从未在聚合中使用“错误”(如sum(FIELD)),这是正常的。

NULL字段始终为空,但空并不总是暗示NULL。特别是,表单中的空或不存在的字段可以转换为表中的非NULL值。自动编号字段就是一个例子。

Oracle在20世纪80年代通过使用长度为零的VARCHAR字符串(空字符串)和NULL的相同表示形式犯了一个错误。他们已经准备好了“现在很快就能解决这个问题”,持续了四分之一个世纪。不要屏住呼吸。

不要使用NULL来传达有意义的消息。这几乎总是让你的同事感到困惑,即使他们否认了。

答案 4 :(得分:0)

Nulls是数据库设计中必不可少的重要工具。如果您不知道记录不相关时的值,则null是完全合适的并且是最佳实践。将unknon变成诸如空字符串之类的已知值是愚蠢的。当您将字符串数据转换为日期或数字数据时尤其如此。 0与null不同,过去或将来的某个任意日期与null不同。就此而言,空字符串意味着没有值,null意味着我们不知道该值是什么。这是一个重要的区别。

处理空值并不难,任何有能力的程序员都应该能够这样做。