我刚进入一个项目,它有一个相当大的数据库后端。我已经开始挖掘这个数据库了,95%的字段是可以为空的。
这是数据库领域的正常做法吗?我只是一个低级的程序员,不是DBA,但我认为您可能希望将可为空的字段保持在最低限度,只在它们有意义的地方。
如果大多数列都可以为空,这是不是一种“代码气味”?
发布于 2009-06-23 20:26:34
根据我的经验,缺省值通常是例外,而空值是常态。
没错,空值是很烦人的。
它也非常有用,因为null是“无值”的最佳指示器。具体的默认值具有很强的误导性,而且您可能会丢失信息或带来混乱。
发布于 2009-06-23 20:29:22
任何开发过数据输入应用程序的人都知道,有些字段在输入时是未知的,这是很常见的--即使是对业务至关重要的列,也要满足@Chris McCall的回答。
然而,“代码气味”仅仅是某种东西可能以一种草率的方式编码的指示器。你使用气味来识别需要更多调查的东西,而不一定是必须改变的东西。
所以,是的,如果您总是看到可为空的列,那么您的怀疑是正确的。这可能表明有人懒惰,或者害怕明确地声明NOT NULL列。你可以证明自己做分析是合理的。
发布于 2009-06-23 21:50:55
我属于极端的NO阵营:我总是避免NULLs。抛开对它们实际含义的基本考虑(因为与不同的人交谈,你会得到不同的答案,比如“没有价值”,“未知值”,“丢失”,“我的姜黄色猫叫Null"),NULLs导致的最糟糕的问题是,它们经常以神秘的方式破坏你的查询。
我已经记不清我必须调试某人的查询的次数(好的,可能是9次),并将问题追溯到对NULL的连接。如果你的代码需要ISNULL来修复连接,那么你也有可能失去索引的适用性和性能。
如果您确实需要存储一个“//null/cat”值(这是我希望避免的),那么最好是明确地说明它。
那些擅长NULLs的人可能不同意这一点。使用NULL往往会将SQL人群分成两部分。
在我的经验中,大量使用NULL与滥用数据库是正相关的,但我不会把这一点作为某种自然规律刻在石板上。我的经验只是我的经验。
编辑:其他想法。有可能像我这样的反零种族主义者比那些支持零的人对正常化更感兴趣。我不认为狂热的规格化者会对他们的表上可以接受NULLs的粗糙边缘感到太高兴。大量的空值可能表明数据库开发人员不会进行大量的规范化。因此,它可能会暗示开发人员在规范化方面的哲学立场,而不是空值表明代码是“糟糕的”。也许这是可以达到的。这只是个想法。
https://stackoverflow.com/questions/1034925
复制相似问题