MySQL数据库规范 (设计规范+开发规范+操作规范)

I 文档定义 1.1 编写目的

      为了在软件生命周期内规范数据库相关的需求分析、设计、开发、测试、运维工作,便于不同团队之间的沟通协调,以及在相关规范上达成共识,提升相关环节的工作效率和系统的可维护性。同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的保证。

1.2  适用范围 

       本文档适用于开发、测试、QA及运维团队成员。 

II . 命名设计规范 2.1 总则

(1)所有命名采用26个英文小写字母和0-9这十个自然数,加上下划线_组成。不能出现其他字符(注释除外)。

(2)对象名尽量短,长度不超过30个字符。

(3)对象名字尽量描述实体的内容,由英文单词、单词组合或单词缩写组成,不以数字和_开头。

(4)命名中禁止使用SQL保留字。

2.2 库名

库名与应用名称尽量一致,统一小写,以下划线分割。

2.3 表名

表名必须使用小写字母或数字,以下划线分割,禁止出现数字开头,禁止两个下划线中间只出现数字。如果表名仅有一个单词,那么建议不使用缩写,而是用完整的单词。同一模块的表尽可能使用相同的前缀,表名称尽可能表达含义。

数据表 <模块标识>_<表标识>  例如: order_header , order_detail

编码表 base_<模块标识>_<表标识>

日志表 log_<模块标识>_<表标识>

2.4 字段名 

(1) 能表达字段功能的英文单词或单词缩写,一般不超过三个英文单词,以下划线分割。布尔类型的字段以“is_”作为前缀。

(2) 各表之间意义相同的字段应同名。

(3) 系统中所有属于内码的字段(仅用于表示唯一性和程序内部用到的标识性字段),名称取为:<表标识>_id。

(4) 系统中属于是业务范围内的编号的字段,其代表一定的业务信息,这样的字段建议命名为<业务标识>_code,其数据类型为VARCHAR,该字段需加唯一索引。

(5) 字段名不要与表名重复。

(6) 不要在列的名称中包含数据类型。

(7) 每个字段添加字段说明。

(8) 数据库字段名的修改代价很大,所以字段名称需要慎重考虑。

(9) 统一命名字段:create_by、create_time、modify_by、modify_time、disabled

2.5 索引名 

A. 非唯一索引必须按照“idx_<构成索引的字段名>”进行命名 

例如:在age上添加索引idx_age

B. 唯一索引必须按照“uidx_<构成索引的字段名>”进行命名

例如:uidx_cardid

C. 组合索引建议包含所有字段名,过长的字段名可以采⽤缩写形式

例如:idx_age_name

2.6 视图命名 

v_<模块标识>_<视图标识> 

2.7 存储过程命名 

usp_<模块标识>_<存储过程标识> 

2.8 函数命名 

ufn_<模块标识>_<函数标识> 

III 数据库设计规范  3.1 表设计原则

(1) 表的存储引擎建议是InnoDB存储引擎,InnoDB 支持事务,支持行级锁,更好的恢复性,高并发下性能更好

(2)同一个DB中的表,其存储引擎、字符集应保持统一

(2) 数据表创建、变更具备说明文档

   数据表创建、变更时必须提供数据表设计文档: 包含表及字段详细说明

(3) 规范化与反规范化

          规范化的优点是减少了数据冗余,节约了存储空间,相应逻辑和物理的I/O次数减少,同时加快了增、删、改的速度。但是一个完全规范化的设计并不总能生成最优的性能,因为对数据库查询通常需要更多的连接操作,从而影响到查询的速度,而且范式越高性能就会越差。出于性能和方便管理的考虑,原则上表设计应满足第三范式。有时为了提高某些查询或应用的性能而可以破坏规范规则,即反规范化。数据应当按两种类别进行组织:频繁访问的数据和频繁修改的数据。对于频繁访问但是不频繁修改的数据,内部设计应当物理不规范化。对于频繁修改但并不频繁访问的数据,内部设计应当物理规范化。比较复杂的方法是将规范化的表作为逻辑数据库设计的基础,然后再根据整个应用系统的需要,物理地非规范化数据。

(4)临时库表必须以 _tmp_ 为前缀并以日期为后缀,备份表必须以 _bak_ 为前缀并以日期 为后缀。

(5)尽量控制单表数据量的大小,建议控制在 600 万以内

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjsws.html