我们通常更喜欢使用空字符串('')作为默认值使所有varchar/ nvarchar列不可为空.团队中有人建议可以为空的更好,因为:
像这样的查询:
Select * From MyTable Where MyColumn IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
比这更快:
Select * From MyTable Where MyColumn == ''
Run Code Online (Sandbox Code Playgroud)
任何人都有经验来验证这是否属实?
Cad*_*oux 12
在某些平台(甚至是版本)上,这取决于NULL的索引方式.
我对NULL的基本经验法则是:
在对齐之前不要允许NULL
除非数据确实是未知的,否则不允许NULL
一个很好的例子是建模地址线.如果你有一个AddressLine1和AddressLine2,那么第一个拥有数据而第二个是NULL是什么意思?在我看来,你要么知道地址与否,并且在一组数据中有部分NULL只是在某人连接它们并获得NULL(ANSI行为)时会遇到麻烦.您可以通过允许NULL并添加检查约束来解决此问题 - 所有地址信息都是NULL或者没有.
与初始/名字相似的东西.有些人没有.这有什么不同,它不知道,你在乎吗?
此外,死亡日期 - NULL是什么意思?没死?未知的死亡日期?很多时候,单个列不足以编码域中的知识.
所以对我来说,是否允许NULL将首先取决于数据的语义 - 性能将是第二,因为数据被错误解释(可能由许多不同的人)通常是比性能更昂贵的问题.
它可能看起来像一个小东西(在SQL Server中,实现是与行一起存储的位掩码),但在理由之后只允许NULL才能使我发挥最佳效果.它在开发早期捕获事物,迫使您解决假设并理解您的问题域.
| 归档时间: |
|
| 查看次数: |
3223 次 |
| 最近记录: |