ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MYSQL数据库设计规范(收集整理版)

2019-04-24 09:48:04  阅读:410  来源: 互联网

标签:收集整理 MYSQL 分表 索引 字段 user 使用 设计规范 名称


一. 命名规范

  1. 数据库、表、字段名采用26个英文字母(大小写区分)和0-9的自然数(通常不加),加上下划线’_'组成,名称尽量控制在32个字符以内,最长不超过64个字符;
  2. 分库、分表命名格式是“通配名_编号”,编号从“1”开始递增,比如“db_001”,以时间进行分库、分表的名称格式是“通配名_时间,比如“db_20190423”;
  3. 创建数据库、表时指定字符集为utf8,排序规则 utf8_general_ci;”
  4. 库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀,比如user_login, user_profile, user_detail, user_role;
  5. 中间表用于保留中间结果集,名称必须以“tmp_”开头;备份表用于备份或抓取源表快照,名称必须以“bak_”开头;中间表和备份表定期清理;
  6. 创建数据库、表、字段名时不要使用MySQL保留字,可参考官方文档;

二. 表结构设计

  1. 使用和业务没有关联的自增id作为主键,类型为int或bigint,且主键值禁止被更新;
  2. 核心表(如用户表)增加行数据的创建时间字段create_time和最后更新时间字段update_time,对于部分状态行数据还可以增加行数据创建人员字段creator和最后更新人员字段modifier;
  3. 表中所有字段建议设置NOT NULL属性(如果添加索引则必须设置),一般情况下设置字符串默认值为空字符串‘’,数字默认值为0,业务可以根据需求自定义默认值;
  4. 预估表中存储数据量级别,如果数据量较大(超过500w)则需要考虑分表策略,可以等量均衡分表或根据业务规则分表;
  5. 建表时添加注释,描述存放数据内容,字段同理添加注释,描述该字段的用途及可能存储的内容,如果存在枚举值则建议将该字段中使用的内容都定义出来;
  6. 表与表之间的相关联字段名称要求尽可能的相同,外键均使用xxx_id的方式来表明(外键可以保证数据完整性和一致性,但是会导致性能下降和维护困难,针对大型项目建议通过程序代码进行约束,不使用外键);
  7. 基本表及其字段之间的关系, 应尽量满足第三范式,但是针对经常需要join查询的字段,可适当在其他表中冗余一份,如user_name属性在user_account,user_login_log等表里冗余一份,从而减少join查询提高查询效率;

三. 数据类型优化

  1. 时间根据具体需求使用datetime或timestamp,具体可参见下表:
    在这里插入图片描述
    i. 如果要用来表示年月日,通常用DATE 来表示
    ii. 如果要用来表示年月日时分秒,通常用DATETIME 表示
    iii. 如果只用来表示时分秒,通常用TIME 来表示
    iv. 如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP 来表示
  2. 业务中IP地址字段推荐使用Unsigned int类型,相较char(15)占用15字节,int只占4字节,更加节省空间,同时查询地址段时更加方便,可以使用下面两个函数实现相互转换:
    SELECT INET_ATON(‘127.0.0.1’); --转为数字
    SELECT INET_NTOA(2130706433); --转为ip
  3. 字符串通常使用varchar,当字段数据有明确的精度和长度时使用char;
  4. 尽量减少字段的显示长度,比如用varchar(20)替换varchar (255),虽然占用的空间是一样的,但是占用的内存后者会更大;
  5. 使用tinyint(1)设置bool类型数据(0,1替代false,true),业务中选择类型较少的状态status、类型type等字段推荐使用tinytint或者smallint类型节省存储空间;
  6. 使用decimal替代float,double;

四. 索引设计

  1. 创建索引时,主键的名称以“pk_”开头,唯一键以“uk_”开头,普通索引以“idx_”开头,一律使用小写格式,以字段的名称或缩写作为后缀;
  2. 单个索引中每个索引记录的长度不能超过64KB,字段不超过5个;
  3. 选择唯一性索引,唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录,比如学生表中学号是具有唯一性的字段,为该字段建立唯一性索引可以很快的确定某个学生的信息;
  4. 为常作为查询条件的字段和经常需要排序、分组和联合操作的字段建立索引;
  5. 限制索引的数目,过多的索引会占用较大的磁盘空间,同时在修改表时,对索引的重构和更新会影响INSERT,DELETE,UPDATE等语句的性能(单个表上的索引个数不能超过7个);
  6. 避免在经常更新的表创建过多的索引,因为表中数据更改的同时,索引也会进行调整和更新,十分消耗系统资源;
  7. 数据量小的表建议不要创建索引,数据量小时索引不仅起不到明显的优化效果,对于索引结构的维护反而消耗系统资源;
  8. 不要在区分度低的字段建立索引,比如性别字段,只有“男”和“女”两种情况,建立索引也无法起到优化效果;

五. 参考资料:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有