通用MySQL数据库规范
通用通用 MySQLMySQL 数据库规范文档数据库规范文档 [V1.3][V1.3] 拟制人:拟制人: 审核人:审核人: 批准人:批准人: 2017 年 11 月 3 日 1 文件变更记录文件变更记录 *A A - 增加MM - 修订D D - 删除 版本号版本号日期日期变更类型变更类型 ((A*M*DA*M*D)) 修改人修改人摘摘要要审核人审核人备注备注 2 目录目录 1 总则 4 1.2 适用范围. 4 1.3 管理职责. 4 1.1 目的 4 1.3.1 开发项目组 . 4 1.3.2 运维部. 4 2 具体规范 . 5 2.2 命名规则. 5 2.1 字符集 5 2.2.1 数据库名称命名规则 . 5 2.2.2 表名称命名规则 . 6 2.2.3 字段命名规则 . 6 2.2.4 索引命名规则 . 7 2.3 字段类型选择. 7 2.3.1 数字类型 . 7 2.3.2 字符串类型 . 8 2.3.3 text 和 blob 类型 9 2.3.4 datetime 和 timestamp 9 2.4 默认情况. 10 2.4.1 主键. 10 2.4.2 默认值. 10 2.5 存储引擎. 10 2.6 数据库版本. 10 3 1 1 总则总则 1.11.1 目的目的 为使 XXXX 公司(以下简称“XX” )内部 MySQL 项目数据库设计遵循标准化、 统一化原则,便于每个开发工程师了解不同业务逻辑关系,同时降低 bug 产生 量和问题排查时间。最终使得 XX 内部所有 MySQL 项目数据库设计条理有序, 关系明确,特制订本使用规范。 1.21.2 适用范围适用范围 本规范适用于 XX 内部所有 MySQL 项目数据库设计。 1.31.3 管理职责管理职责 1.3.11.3.1 开发项目组开发项目组 (1) 开发工程师依据该规范设计数据库。 (2) 各项目组技术负责人先内部审核数据库设计方案。 1.3.21.3.2 运维部运维部 (1) 由运维部严格把关各个项目组初审提交的数据库设计方案。 对于违法该规 范,数据库管理员须要求其重新设计或修改,对于符合该规范可在服务器执行。 4 2 2 具体规范具体规范 2.12.1 字符集字符集 凡涉及数据库表结构须统一 utf8 字符集,包括客户端和服务端。 1. 客户端字符集 character_set_client= utf8 ; 2. 连接层字符集 character_set_connection= utf8//连接层字符集设置 3. 数据库默认字符集 character_set_database= utf8//数据库端字符集默认设置 4. 默认内部操作字符集 character_set_server= utf8//服务端字符集设置 5. 系统元数据(字段名等)字符集 character_set_system= utf8//系统元数据字符集设置 6. 查询结果字符集 character_set_results= utf8//查询结果字符集设置 //客户端字符集设置 2.22.2 命名规则命名规则 2.2.12.2.1 数据库名称命名规则数据库名称命名规则 数据库命名规则必须遵循如下规则: (1) 小写字母,数字和半角下划线组合。 5 (2) 禁止使用关键字。 (3) 字母遵循英文简称或简写模式。 (4) 名称必须和业务关联。 2.2.22.2.2 表名称命名规则表名称命名规则 表名称命名必须遵循易懂、简单、无二义性原则,必须遵循如下规则: (1) 小写字母,数字和半角下划线组合。 (2) 禁止使用关键字。 (3) 表命名根据表的业务逻辑用半角下划线拼接, 相同业务表须带有相同表头 标识。 2.2.32.2.3 字段命名规则字段命名规则 字段名称须遵循易懂、简单原则: (1) 小写字母,数字和半角下划线组合。 (2) 禁止使用关键字。 (3) 每个非定义表(表内容经常变更)必须包含 create_time 和 update_time, 根据时间戳更新。 (4) 每个非定义表(表内容经常变更)必须包含 create_id 和 update_id 用于追 溯创建和修改来源。 (5)上述四个字段的顺序为:create_id,create_time,update_id, update_time。 6 2.2.42.2.4 索引命名规则索引命名规则 为了便于识别索引和代码中检索索引,现统一按如下规则命名索引名称: (1) 索引以 idx_表名缩写_字段缩写。 (2) 唯一索引以 uk_表名缩写_字段缩写。 (3) 外键以 fk_表名 1(自身表)缩写_表名 2(关联表)缩写_字段缩写。不建议 使用外键,将影响数据库性能。 2.32.3 字段类型选择字段类型选择 字段类型选择遵循:能占一个字节绝不占两个字节。因此在设计表结构时需要预 估字段值范围。 2.3.12.3.1 数字类型数字类型 (1) 整数 tinyint 1 字节 (-128,127) (0,255) 小整数值。 smalliny 2 字节 (-32768,32767) (0,65535) 大整数值。 mediumint 3 字节 (-8388608,8388607) (0,16777215) 大整数值。 int 或 integer 4 字节 (-2147483648,2 147483647) (0,4294967295) 大整 数值。 bigint 8 字节 (-9233372036854775808,9223372036854775807) (0,18 446744073709551615) 极大整数值。 对于自增字段,如果记录经常做物理删除(delete)或记录数未来可能会超过 21 7 亿必须用 bigint。 默认使用 unsigned 类型。 对于表示状态、类型、种类一律用tinyint,依据域范围合理选择smallint、 mediumint。 (2) 小数 float 4 字节单精度浮点数值。 float(m,n),其中 m=n,m 表示显示 m 位整数,n 表示最多 n 位位于小数点 后面。 double 8 字节双精度浮点数值。 代码中允许近似值存在,一律使用 float、double 类型。 对于货币、金额等不允许四舍五入,一律用 decimal。 2.3.22.3.2 字符串类型字符串类型 (1) char(n) char(n) 占 n 字 节 , 1=n=255 , 如 果 字 段 值 都 接 近 某 一 固 定 长 度 max(length(column_name))n 且该字段更新比较频繁,建议使用 char(n)。 例如:ip、user_name、title、address、url 等等。 (2) varchar(m) varchar(m)占 L 字节, 1=L=65535 , 其中最大能存储 n 个字符(utf8 编码), 1=n=21845, 如果字符串列的最大长度比平均长度大很多且更新不频繁, 建 议使用 varchar(m)。 例如:帐号、名称、标题、内容等。 8 comment_content、content、description、a