工作中:如何在实际工作中处理 NULL,并给出一些指南

如何在实际工作中处理 NULL,并给出一些指南

2.9 消灭 NULL 委员会

本节将从 NULL 的问题讲起,主要介绍一些避免问题的具体方法。不 过这些方法执行起来非常简单,只需在设计的时候稍微注意一下就行,因 此这里不作详细讲解。本节将揭示这些方法,当然笔者也希望大家都加入 到消灭 NULL 的运动中来

为什么 NULL 如此惹人讨厌

  1. 在进行 SQL 编码时,必须考虑违反人类直觉的三值逻辑。
  2. 在指定 IS NULL、 IS NOT NULL 的时候,不会用到索引SQL 语句执行起来性能低下。
  3. 如果四则运算以及 SQL 函数的参数中包含 NULL,会引起“NULL的传播”。
  4. .在接收 SQL 查询结果的宿主语言中, NULL 的处理方法没有统一标准。
  5. 与一般列的值不同, NULL 是通过在数据行的某处加上多余的位(bit)来实现的。因此 NULL 会使程序占据更多的存储空间,使得检索性能变差.

无法完全消除 NULL 的原因是它扎根于关系数据库的底层中。仅仅靠
在表中所有列加上 NOT NULL 的约束是不够的。因为即使这样做,在使用
外连接,或者 SQL-99 中添加的带 CUBE 或 ROLLUP 的 GROUP BY 时,还是很
容易引入 NULL 的。因此我们能做的最多也只是“尽量”去避免 NULL 的产生。
实际上,如果合理利用, NULL 还是有很多非常方便的用途的。但问题是,“合
理使用”NULL 正是最困难的地方。 NULL 最恐怖的地方就在于即使你认为自
己已经完全驾驭它了,但还是一不小心就会被它在背后捅一刀.

我们可以把 NULL 视为一种药品:适当使用可能有益,但滥用会导致毁灭。
最好的策略是尽可能地避免适用 NULL,并在不得不使用时适当使用。

接下来我们分几个场景来讨论一下消除 NULL 的具体做法.

1 编号 : 使用异常编号

2 名字 : 使用“无名氏”

3 数值 : 用 0 代替

因此更加可行的方案是下面这样的方案。

  1. 转换为 0。
  2. 如果一定要区分 0 和 NULL,那么允许使用 NULL。
  3. 如果能转换为 0,希望大家还是尽量把 NULL 转换为 0。

4 日期 : 用最大值或最小值代替

结束语:至此,我们分 4 种数据类型介绍了消除 NULL 的具体方法,这里总结如下。
(1) 首先分析能不能设置默认值。
(2)仅在无论如何都无法设置默认值时允许使用 NULL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值