我们通常更愿意拥有我们所有的varchar
/nvarchar
列不可为空使用空字符串 ('') 作为默认值。团队中有人建议nullable更好,因为:
像这样的查询:
Select * From MyTable Where MyColumn IS NOT NULL
比这个更快:
Select * From MyTable Where MyColumn == ''
有谁有经验来验证这是否属实?
在某些平台(甚至版本)上,这将取决于 NULL 的索引方式。
我对于 NULL 的基本经验法则是:
在合理之前不允许 NULL
除非数据确实未知,否则不允许使用 NULL
一个很好的例子是对地址线进行建模。如果有AddressLine1和AddressLine2,第一个有数据而第二个为NULL意味着什么?在我看来,你要么知道地址,要么不知道,当有人将它们连接起来并得到 NULL(ANSI 行为)时,一组数据中包含部分 NULL 只会带来麻烦。您可以通过允许 NULL 并添加检查约束来解决此问题 - 所有地址信息都为 NULL 或没有。
与中间名首字母/名字类似。有些人没有。这与未知有什么不同吗?你关心吗?
另外,死亡日期 - NULL 是什么意思?没死?死亡日期未知?很多时候,单列不足以编码某个领域的知识。
所以对我来说,是否允许 NULL 在很大程度上取决于语义首先是数据 - 性能将是第二位,因为数据被误解(可能被许多不同的人)通常是一个比性能更昂贵的问题。
这看起来可能是一件小事(在 SQL Server 中,实现是与行一起存储的位掩码),但在我看来,在合理化之后只允许 NULL 效果最好。它在开发早期就捕获了问题,迫使您解决假设并理解您的问题领域。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)