如何在实际工作中处理 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

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

  1. 工作事件五点作法和网络中所产生的Winsock连接与互动

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. http://1572091hyl10.blog.51cto.com/1562091/6626 ...

  2. Science:“每周工作进展汇报”在博士培养中的作用

    编译自<Science>2021年12月3日.阅读原文请点击文后的"阅读原文" https://www.science.org/content/article/my-p ...

  3. 查询qt中的数据_EXCEL在多表中查询数据(函数中引用工作表的办法)

    与EXCEL打交道也好几年了,你是不是还停留在经常性简单而重复的工作呢?每月忙的时候天天加班,空闲的时候盯着手机刷刷刷,,既然如此,轻松的时候就应该琢磨下怎样提升效率,比如规范好自己的数据源,设计一套 ...

  4. 保险运用计算机的工作干什么,关于计算机在保险业务中的应用研究

    张福斌 侯悦 吴婷婷 [摘要]随着我国社会经济的不断发展,科学技术水平也有了一定程度的提高.对于保险业务来说,可以借助计算机技术来进行处理,能够促进我国保险业务的发展,提高工作的质量.因此,在实际工作 ...

  5. Excel2010中VLOOKUP函数跨工作簿使用实例:

    Excel2010中VLOOKUP函数跨工作簿使用实例: 首先我们打开Excel主页面,其中有三个sheet表:我们将表三"图书编目表"中的"图书编号"导入到表 ...

  6. 如何修改myeclipse中web项目的工作路径或默认路径

    如何修改myeclipse中web项目的工作路径或默认路径 博客分类: J2EE开发技术指南 安装好myeclipse后,第一次启动myeclipse时,都会弹出会弹出Workspace Launch ...

  7. Java中的Volatile如何工作? Java中的volatile关键字示例

    如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...

  8. ios开发 mvp实践_实践中开发人员的工作流程-我们如何在30天内建立​​MVP

    ios开发 mvp实践 by Léna Faure 莱娜·福雷(LénaFaure) 实践中开发人员的工作流程-我们如何在30天内建立​​MVP (The developer's workflow i ...

  9. python 获取当前目录_如何在Python中获取当前的工作目录?

    python 获取当前目录 To get the current working directory in Python, there is a library function getcwd() i ...

最新文章

  1. java培训:什么是抽象类?怎么定义?
  2. mysql 不同分区 同时insert_一文看懂mysql数据库分区表概念、类型、适用场景、优缺点及原理...
  3. grid - 使用相同的名称命名网格线和设置网格项目位置
  4. Java 之文件目录操作
  5. cordova插件开发
  6. 312. Burst Balloons
  7. 我的ActiveRecord学习之路(一)
  8. Winsw将jar包部署为windows服务
  9. html分享到微博,前端实现分享内容到微博、QQ、QQ空间、豆瓣等平台
  10. 利用OpenCV进行颜色检测
  11. 【mcuclub】模数转换ADC0832
  12. 2021年5月23日哈工大scir笔试
  13. 大厂与小厂招人的区别,看完多少有点不敢相信
  14. 服务器添加html扩展,html5 – 服务器可扩展性 – HTML 5 websockets和彗星
  15. 现代函数概念的“序偶”定义
  16. 认识Web Workers
  17. “安心记加班”完成亿元级B轮融资,蚂蚁金服领投
  18. CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)
  19. 涨姿势!国外程序员搞副业的 10 大方式
  20. Java基础编程题(API阶段测试)(答案)

热门文章

  1. SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
  2. c++语言中for循环语句,C++ 循环
  3. 12如何隐藏dock栏_ iOS 13 隐藏 Dock栏,一张神奇壁纸就可以
  4. nginx 调用dll_使用DLL中的资源
  5. 单人存档_电子发票归档怎么保存稳当?电子发票存档你都会了吗?
  6. OpenSIPS替代VOS3000的方案
  7. 张首晟教授:区块链让社会变得更加公平 与人工智能的结合令人激动 | IT领袖峰会...
  8. 认识:人工智能AI 机器学习 ML 深度学习DL
  9. MySQL 性能优化--QueryCache的原理
  10. shell 将两行内容合并到同一行