项目开发为什么要求MySQL采用非空字段
题记
企业级项目开发中,数据库建库、表都有一定的规范及要求,在数据库建表时对于一些可能没有数据存储的字段,我们应该要求把它设置为
NOT NULL
,好多开发同事不理解,那么我们为何如此要求,有什么好处呢?
统一规范
无规矩不成方圆,从小的方面来说,对于任何企业、组织、社会团体,如果没有规矩,规范,就会像一团散沙,就是像漂浮的浮萍,难以长久,更难以成就大事。作为以严谨著称的程序员,在规范合理的前提下,大家遵从规范才有利于项目长久发展,稳定运行,不受时间、人员影响。PS:(
代码规范
、设计规范
、编码规范
、注释规范
、脚本规范
、配置文件规范
、文档输出规范
等)。
MySQL采用非空字段缺点
正如大家所言,这个字段可能没数据,所以我允许存
NULL
,一定程度上限制了开发的灵活性,这样说也对,从小而言,我们步入开发行业以来所使用的工具,框架,脚手架,学习文档,无时无刻不在向我们告诉我们这就是开发的规范。
MySQL采用非空字段优点
数据角度分析
节省空间
从数据存储角度分析,
NULL
列需要更多的存储空间,需要一个额外字节作为判断是否为NULL
的标志位。
减少空值计数错误
有
NULL COLUMN
存在的情况下,COUNT(NULL COLUMN)
需要格外注意,NULL
值不会参与统计。
示例
SELECT COUNT(COLUMN)FROM TABLE_NAME;
对索引友好
可参见
https://blog.csdn.net/shang_xs/article/details/90713370?spm=1001.2014.3001.5501
索引效率高的前提是列的区分度大,包含
NULL
的列很难优化,而且对表索引时不会存储NULL
值。如果索引字段可以为NULL
,索引的效率会下降。因为它们使得索引、索引的统计信息以及比较运算更加复杂,所以要求列值非空。
示例
ALTER TABLE TABLE_NAME ADD COLUMN_NAME VARCHAR(32) NOT NULL DEFAULT ‘’ COMMENT ‘新增 VARCHAR字段’;
ALTER TABLE TABLE_NAME ADD COLUMN_NAME INT NOT NULL DEFAULT 0 COMMENT ‘新增INT字段’;
NOT IN
NOT LIKE
<>
查询
NOT IN
NOT LIKE
<>
等条件查询在有NULL
值的情况下,返回为空结,查询数据存在问题。
代码角度分析
NULLPOINTEREXCEPTION
异常问题
代码使用时,对于映射属性处理可以在能减少
NULLPOINTEREXCEPTION
异常情况。
代码处理数据不准
如上文所示,代码执行过程中涉及数据库相关操作时,会存在问题。