如何避免列为NULL

来源:9-2 不再随意设置数据类型,不给未来留隐患

街边七号

2020-09-23

一哥,课程中对于这个问题的答案是:使用默认值
我这边碰到过这种场景:“测定某些物品的系数, 然后呢,有可能他这个物品压根就没有测定系数也就是null,也有可能他测出来的系数就是0”。也就是说列的可能值覆盖面太广,无论设置什么为默认值都存在可能这个默认值就是实际的有意义的值 (数据质量差 ), ”。如果一定追求非NULL的话,我想过的一个方法是将测定出来的物品系数存到另一张表里。这个时候如果数据关联不到了那就说明测定系数是空的即没有对物品进行测定否则就是测定了(即便系数的值为0或者其他常被约定为默认值的内容)。但是时间紧,没工夫实现。。。。一哥有这方面的其他经验吗?

写回答

1回答

张勤一

2020-09-25

葫芦兄你好:

    我跟你说,你这个问题提的非常好。你说的这种情况也确实是存在的。所以,如果你读过一些优秀的源码的话,你可能会看到一些很有意思但是不知道是什么含义的数字,例如:9999,-9999。这些数字,我们把它称作是“无意义的数”(注意,区分魔数的概念)。

    遇到这种问题,我们首先需要考虑的就是当前业务中的“无意义的数”,只要是能够找到这样的数字,那么,就可以使得这一列是 NOT NULL 的,那么,对于 int 类型的列,我们就可以指定为 MAX.INT_VALUE,或者 MIN.INT_VALUE。

    当然,如果实在是找不到,怎么办呢?葫芦兄说的“另一张表”策略当然是可行的,不过,这样增加了系统的复杂度,你会引发事务的出现。所以,我并不推荐这样去做。

    理论终归是理论,如果实在找不到更好的方案,设置为 NULL 吧,没毛病的,老铁!


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

1
0

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

466 学习 · 204 问题

查看课程