MYSQL数据库设计规范(收集整理版)
作者:互联网
一. 命名规范
- 数据库、表、字段名采用26个英文字母(大小写区分)和0-9的自然数(通常不加),加上下划线’_'组成,名称尽量控制在32个字符以内,最长不超过64个字符;
- 分库、分表命名格式是“通配名_编号”,编号从“1”开始递增,比如“db_001”,以时间进行分库、分表的名称格式是“通配名_时间,比如“db_20190423”;
- 创建数据库、表时指定字符集为utf8,排序规则 utf8_general_ci;”
- 库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀,比如user_login, user_profile, user_detail, user_role;
- 中间表用于保留中间结果集,名称必须以“tmp_”开头;备份表用于备份或抓取源表快照,名称必须以“bak_”开头;中间表和备份表定期清理;
- 创建数据库、表、字段名时不要使用MySQL保留字,可参考官方文档;
二. 表结构设计
- 使用和业务没有关联的自增id作为主键,类型为int或bigint,且主键值禁止被更新;
- 核心表(如用户表)增加行数据的创建时间字段create_time和最后更新时间字段update_time,对于部分状态行数据还可以增加行数据创建人员字段creator和最后更新人员字段modifier;
- 表中所有字段建议设置NOT NULL属性(如果添加索引则必须设置),一般情况下设置字符串默认值为空字符串‘’,数字默认值为0,业务可以根据需求自定义默认值;
- 预估表中存储数据量级别,如果数据量较大(超过500w)则需要考虑分表策略,可以等量均衡分表或根据业务规则分表;
- 建表时添加注释,描述存放数据内容,字段同理添加注释,描述该字段的用途及可能存储的内容,如果存在枚举值则建议将该字段中使用的内容都定义出来;
- 表与表之间的相关联字段名称要求尽可能的相同,外键均使用xxx_id的方式来表明(外键可以保证数据完整性和一致性,但是会导致性能下降和维护困难,针对大型项目建议通过程序代码进行约束,不使用外键);
- 基本表及其字段之间的关系, 应尽量满足第三范式,但是针对经常需要join查询的字段,可适当在其他表中冗余一份,如user_name属性在user_account,user_login_log等表里冗余一份,从而减少join查询提高查询效率;
三. 数据类型优化
- 时间根据具体需求使用datetime或timestamp,具体可参见下表:
i. 如果要用来表示年月日,通常用DATE 来表示
ii. 如果要用来表示年月日时分秒,通常用DATETIME 表示
iii. 如果只用来表示时分秒,通常用TIME 来表示
iv. 如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP 来表示 - 业务中IP地址字段推荐使用Unsigned int类型,相较char(15)占用15字节,int只占4字节,更加节省空间,同时查询地址段时更加方便,可以使用下面两个函数实现相互转换:
SELECT INET_ATON(‘127.0.0.1’); --转为数字
SELECT INET_NTOA(2130706433); --转为ip - 字符串通常使用varchar,当字段数据有明确的精度和长度时使用char;
- 尽量减少字段的显示长度,比如用varchar(20)替换varchar (255),虽然占用的空间是一样的,但是占用的内存后者会更大;
- 使用tinyint(1)设置bool类型数据(0,1替代false,true),业务中选择类型较少的状态status、类型type等字段推荐使用tinytint或者smallint类型节省存储空间;
- 使用decimal替代float,double;
四. 索引设计
- 创建索引时,主键的名称以“pk_”开头,唯一键以“uk_”开头,普通索引以“idx_”开头,一律使用小写格式,以字段的名称或缩写作为后缀;
- 单个索引中每个索引记录的长度不能超过64KB,字段不超过5个;
- 选择唯一性索引,唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录,比如学生表中学号是具有唯一性的字段,为该字段建立唯一性索引可以很快的确定某个学生的信息;
- 为常作为查询条件的字段和经常需要排序、分组和联合操作的字段建立索引;
- 限制索引的数目,过多的索引会占用较大的磁盘空间,同时在修改表时,对索引的重构和更新会影响INSERT,DELETE,UPDATE等语句的性能(单个表上的索引个数不能超过7个);
- 避免在经常更新的表创建过多的索引,因为表中数据更改的同时,索引也会进行调整和更新,十分消耗系统资源;
- 数据量小的表建议不要创建索引,数据量小时索引不仅起不到明显的优化效果,对于索引结构的维护反而消耗系统资源;
- 不要在区分度低的字段建立索引,比如性别字段,只有“男”和“女”两种情况,建立索引也无法起到优化效果;
五. 参考资料:
https://www.jianshu.com/p/0f8348b2aa86
https://blog.csdn.net/skymyxvincent/article/details/60322708
http://www.cnblogs.com/ryanlamp/p/6428811.html
https://www.cnblogs.com/qlqwjy/p/8425861.html
标签:收集整理,MYSQL,分表,索引,字段,user,使用,设计规范,名称 来源: https://blog.csdn.net/luocheng7430/article/details/89486281