一,数据库。
1:新建数据库时数据库名称和项目名称保持一致。
2:普通web项目,新建数据库时字符集选择utf8mb4 -- UTF-8 Unicode,排序规则选utf8mb4_general_ci
二,表。
1:表前缀必须统一
2:表名称命名要求必须采用小写加下划线,格式为:表前缀_aaa_bbb
三,字段。
1:字段名称命名格式必须采用小写加下划线。
2:数据规模不大的表,主键字段统一采用'id'命名,勾选自动递增,选择较短的数据类型。
解读1:主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用。
解读2:较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率。
3:数据规模较大的表,主键字段统一采用‘uuid’命名。
4:所有字段都必须填写注释信息,表明这个字段的含义。
解读:你不写注释信息,别人怎么知道你这个字段是干什么的?
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,所以完全可以保存下。
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地址即可。
最后,如果你有不同的建议,欢迎私信我,提出你的见解,我们一起完善。