说来惭愧,这是耽误了将近1年的工作,一直零零散散拖着没做完,昨天总算是卯着劲出了一个版本。
最初是打算更新一版MySQL开发规范,把一些新的技术栈和思路都更新迭代,与时俱进,但是做了一段时间,发现这件事情比自己想得要复杂。比如:
1)索引设计规范,就得从更高的维度去思考什么样的索引是最合适的,需要有哪几个重点要素考量,这个话题就开水考验我的思考能力了。
2)SQL设计规范,什么样的SQL是最合理的,也需要提炼SQL质量模型,还得带一些通用性,同时具备实用性,否则就都是废话了。
先说说总体的成果,SQL开发规范我是打算拆分为5个部分,包括数据库命名规范,对象结构设计规范,SQL优化设计规范、高并发设计规范和开发规范落地指南,这是循序渐进,从基础到进阶落地的内容组织形式。
对这五个部分的定位和标签是:
1)数据库命名规范:规范始于命名
2)对象结构设计:结构设计是基石
3)SQL优化设计规范:SQL性能无小事
4)高并发设计规范:并发高阶必备技
5)开发规范落地指南:快速稳落地
我先列出一部分的内容,比如数据类型设计规范,是属于对象结构设计章节的。
数据库类型主要以MySQL为例进行说明,主要包括数值类型,字符类型和日期类型:
数值类型
注:
1)用户pid数据类型,根据平台统一规划应设计为bigint unsigned
2)MySQL中每个数据表中字段数量尽可能少且字段长度尽可能小,可以用int的则不能用bigint,能用tinyint的不能用int;
3)对于布尔值的设置,建议使用TINYINT来代替布尔类型
4)不建议使用ENUM类型,可使用TINYINT来代;
5)用DECIMAL代替FLOAT和DOUBLE存储精确浮点数;
6)使用无符号整型(UNSIGNED)存储非负整数;
7)在存储IP地址时,不建议存储成字符型数据,建议使用INT UNSIGNED,建议从应用层面控制IP地址的格式转换;
字符类型
注:
1)对于可变长字符串VARCHAR,只分配真正需要的空间;
2)多个数据表中都有相同属性字段时,数据类型和属性需保持一致;如同样表示用户名的字段,需要在各相关表中都设置同样的属性:varchar(20)
3)尽可能不使用TEXT、BLOB类型,这类大对象在数据库存储和使用时,比较容易产生存储和性能问题;
4)数据库中不允许存储大文件,或者照片,可以将大对象放到其他存储上,数据库中存储它的路径。
日期类型
注:
1)普遍情况,建议使用datetime,因为datetime和timestamp的存储占用空间不同,datetime占用8个字节,timestamp占用4个字节,所以说timestamp支持的时间范围要窄一些。范围为:1970-01-01 08:00:01到2038-01-19 11:14:07 而datetime支持的时间范围则要大很多。1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
2)如果对于时间类型字段需要设置动态的默认值,在MySQL 5.6.5以前不支持,需要使用timestamp,或者不设置默认值。
3)date数据类型的精度较低,如果精度为日,则优先使用。
4)日期和时间字段精确度到“秒”,建议使用unix时间戳格式存储(数据类型为int),在展示的时候需要注意一下时区问题;每条记录都需要有插入时间字段,如果有需要,可以增加记录修改时间字段;重要的数据记录和数据操作,可以记录日志。
网友评论