数据库设计规范

首先我们先看一下,标准规范的建表SQL语句的是什么样子的,如下:

mysql数据库的建立和配置(MySQL数据库创建库表的基本规范)(1)

库名规范

mysql数据库的建立和配置(MySQL数据库创建库表的基本规范)(2)

  1. 库命名应该在30个字符以内,存在关联关系的表在命名时尽量体现关联关系,如user表与user_registry表。
  2. 库名称格式应遵循“业务系统名称_子系统名称”,相同模块的表名尽量使用统一前缀。
  3. 创建数据库时应该显式指定字符集,并且字符集只能是 utf8或者 utf8mb4。

建表规范

mysql数据库的建立和配置(MySQL数据库创建库表的基本规范)(3)

  1. 表命名和字段命名应该控制在30个字符以内,使用英文小写单词,表名应由字母、数字和下划线组成,禁止使用中文命名,如果有多个单词需使用下划线隔开。
  2. 创建表时,表命名时应该用英文单词的单数形式,如学生信息表命名,应该为student而不是students。
  3. 创建表时,对相关功能的表应当使用相同前缀,前缀通常为这个表的模块或依赖主实体对象的名称缩写,如物资系统采用”wz_”作为前缀。
  4. 创建表时,表字段命名不建议使用数据库关键字,如:name,time ,datetime
  5. 创建表时,应该显式申明字符集为 utf8或 utf8mb4,如 DEFAULT CHARSET=utf8
  6. 创建表时,应该对字段和表添加COMMENT。
  7. 创建表时,应该创建主键,建议使用 auto_increment的 id作为主键(与业务无关,与业务相关字段应创建唯一索引),类型应为 intbigint。推荐使用bigint类型,因为无符号int存储范围为-2147483648~2147483647,溢出后会导致报错。
  8. 创建表时,应该有创建时间字段create_time和更新时间字段update_time。
  9. 创建表时,必填字段应该尽量设置NOT NULL属性,同时根据实际业务需要定义DEFAULT值。尽量避免使用NULL,因为使用NULL需要占用额外的空间存储、聚合函数计算结果偏差,同时含有NULL值的列,会对SQL优化产生影响,尤其是组合索引中。
  10. 创建表时,不推荐使用blob,text类型,比较浪费硬盘和内存空间,在加载表数据时,会读取大字段到内存里从而浪费内存空间,影响系统性能。建议对表中的blob、text等大字段,垂直拆分到其他表里,仅在需要读这些对象的时候才去查询。
  11. 创建表时,对需要频繁JOIN查询的字段,建议在其他表里冗余存储。如 username 字段在user_account,user_registry等表里冗余存储username ,减少JOIN查询。
  12. 创建表时,表与表之间的相关联字段尽量使用统一名称,如 user_account 表 里面的 username 和 user_registry表里面的 username 相对应。
  13. 创建表时,文本数据尽量用varchar存储,时间类型尽量选取timestamp。
  14. 创建中间表时,表名称建议以 tmp_开头,时间结尾,需定期清理。
  15. 创建备份表时,表名称建议以bak_开头,时间结尾,需定期清理。
  16. 创建表时,应该显式申明存储引擎类型,表引擎取决于实际应用场景及当前数据库中的已经存在的存储引擎,我们通常使用InnoDB存储引擎。Innodb存储引擎支持事务、行级锁、更好的恢复性、高并发下性能更好,对多核、大内存、SSD等硬件支持更好。

索引规范

mysql数据库的建立和配置(MySQL数据库创建库表的基本规范)(4)

  1. 主键索引的名称建议以"pk_"开头,唯一索引以"uq_"开头,非唯一索引以"idx_"开头,以表名、字段的名称或缩写作为后缀,索引名称必须使用小写。
  2. 创建索引时,多考虑建立联合索引,并把字段值去重之后的个数多的放在前面。
  3. 单索引中每个索引值的长度建议不超过64KB,不要索引blob、text等大字段,这样作会让索引占用太多的存储空间.。
  4. 单个表上的索引个数建议不超过5个,唯一索引由3个以下字段组成,并且字段都是整形时,使用唯一键作为主键。
  5. 在多表 JOIN的SQL语句里,保证被驱动表的连接列上有索引,这样JOIN执行效率最高。
  6. 避免存在冗余索引,合理创建联合索引(避免冗余),如果表里已经存在key(a,b),则key(a)为冗余索引,需要删除key(a)。

,