一路走来,数据库命名总是随心所欲,是时候规范一下啦~
设计规范
一、库名
1、【强制】库名必须在32个字节以内
2、【强制】创建库时必须指定字符集
二、表结构
1、【强制】表名要求32字符以内,与模块名强相关,为避免过长采用模块缩写作为前缀,如教师模块采用“teach_”做前缀。
2、【强制】必须指定字符集。
3、【强制】必须有comment注释。
4、【强制】中间表用于保留中间结果集,名称必须以tmp_开头
备份表用于备份,以bak_开头。
5、【强制】对于数据量比较大的表进行alter_table,需要在业务低峰期运行,因为alter_table会产生表锁,影响写入。
6、【建议】核心表要带入create_time和update_time方便后期查问题。
7、【建议】表中字段都使用not null,业务可以根据需要定义默认值。数据库中不插入null。因为使用null会占用额外空间,数据迁移的时候还容易出错,聚合函数计算结果也会因此出错。
8、【建议】反范式设计:把经常需要join查询的字段加上索引。
三、字段设计
1、【强制】驼峰设计。
2、【建议】每个表最好都有一个create_time。
3、【建议】可能会使用索引的字段,就要设置字段属性是not null,可以根据业务设置默认值。
4、【建议】可枚举的类型,建议用1、2、3…来表示,default=99表示其他
备份表用于备份,以bak_开头。
5、【建议】表示是否类型的使用is_动词。
四、列数据类型
1、【建议】业务中选择比较少的状态、类型推荐使用tinyint类型节省存储空间。
2、【建议】boolean类型属性命名规范
boolean类型不要加is,否则部分框架解析会引起序列化错误。
根据阿里巴巴团队的中文手册,固定boolean类型的类属性和数据表字段都统一使用flag结尾。如online_flag
3、【建议】文本数据尽量用varchar,小数类型用decimal
五、索引设计
1、[强制]主键的名称以”“开头,唯一键以"uix"开头,普通素引以idx开头,一律使用小写格式,字段名作为后缀。
2、[强制]innoDB和MyISAM存储引擎表,索引美型必须为BTREE;MEMORY表可以根据需要选择HASH或省BTREE类型索引。
3、[建议] 单个表上的豪引个数不能超过5个。
4、[建议] 在理立索引时,多考建立联合索引,并把区分度最高的字段放在最前面
5、[建议]在多表ioin的SQL里,保证被驱动表的连接列上有索引,这样执行效率最高。
6、[建议] 建表或加索引时,保证表里互相不存在冗余索引,对于MySQL来说,如果表里已经存在key(a,b),则key(a)为冗余索引,需要删除。
参考文献
https://www.bilibili.com/video/BV1HJ411G7vh/?spm_id_from=333.880.my_history.page.click