|  在技术加营销的道路上越走越远
温馨提示
我是弹窗内容
当前位置:首页 > 后端技能提升 > 数据库设计细节规范
数据库设计细节规范

数据库设计细节规范

日期:2023-11-06 浏览量:275 原创作者:湖八爷
编写了一个数据库设计细节规范,方便团队合作以及带新人用的,需要的小伙伴可以参考一下。


一,数据库。

1:新建数据库时数据库名称和项目名称保持一致。


2:普通web项目,新建数据库时字符集选择utf8mb4 -- UTF-8 Unicode,排序规则选utf8mb4_general_ci


新建数据库时字符集的选择.png



二,表。

1:表前缀必须统一


2:表名称命名要求必须采用小写加下划线,格式为:表前缀_aaa_bbb



三,字段。

1:字段名称命名格式必须采用小写加下划线。


2:数据规模不大的表,主键字段统一采用'id'命名,勾选自动递增,选择较短的数据类型。

解读1:主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用。

解读2:较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率。


3:数据规模较大的表,主键字段统一采用‘uuid’命名。


4:所有字段都必须填写注释信息,表明这个字段的含义。

解读:你不写注释信息,别人怎么知道你这个字段是干什么的?


5:所有字段都必须勾选上“不是null”


6:所有字段都应该根据实际情况采用合适的类型,尽量少使用text,mediumtext等字段。


7:固定长度的字符串字段必须使用char类型。


8:实际情况符合的条件下,整张表尽量所有字段都使用整型(因为这样的表会被mysql当成固定长度的表)


9:如果字段与其它表的字段相关联,需建索引。

比如admin表中的“id”字段和admin_login_log表中的“admin_id”字段,建立索引以后查询效率直接起飞。


10:所有整型字段都无需设置长度,采用默认长度即可。

比如tinyint类型的字段长度默认为3,smallint类型的字段长度默认为5,mediumint类型的字段长度默认为8,int类型的字段长度默认为10即可。

至于为什么,可以查看这篇文章《int(1),int(10)和int(11)有什么区别?》。


11:普通web项目,所有日期和时间统一使用Unix时间轴,数据类型为int(10),无符号,默认0的字段。

解读:int类型(无符号),最大可保存的数值为2的32次方 - 1,也就是4294967295,而2099年12月31日23时59分59秒转换为Unix时间轴后的数值为4102415999,该数值小于4294967295,所以完全可以保存下。


普通时间转化为Unix时间戳.png


12:状态码字段,统一使用数据类型为tinyint(3),无符号,默认0的字段。状态码的值从1开始,默认的0不能当成状态码。各个状态码代表的意思需在备注处写清楚。

解读:状态码字段一般只有几个状态,而tinyint类型(无符号),最大可保存的数值为2的8次方 - 1,也就是255,所以完全够用了。


13:ipv4地址字段,统一使用char 15,默认为空字符串。

解读1:虽然可以使用int类型来存储,但是ip2long之后往往会超过int最大范围而被强制转换为string类型,所以还不如一开始就直接用string类型。

解读2:ip基本不会参与计算。


14:禁止使用enum类型,可使用tinyint类型代替。

解读1:增加新的enum值要做DDL操作。

解读2:enum的内部实际存储就是整数。


15:禁止使用存储过程、视图、触发器、Event

解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移比较好。


16:禁止存储大文件或者大照片。

解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里只需要存放文件或图片的url地址即可。



最后,如果你有不同的建议,欢迎私信我,提出你的见解,我们一起完善。