DB规范
一. 目的
指导研发人员合理使用 MySQL ,发挥 MySQL 最优性能。
二、名词
术语和缩略语 |
描述 |
主键( PK ) |
Primary Key ,自带唯一和非空约束的索引键, 一个表中只有一个主关键字,主关键字又称为主键。 |
外键 ( FK ) |
Foreign Key,建立于表与表之间的联系,方便程序的编写。 |
索引 |
Index ,索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 |
覆盖索引 |
Covering Index , InnoDB 支持覆盖索引(或称索引覆盖),即从辅助索引中可以得到查询的数据,而不需要查询聚簇索引中的记录。 |
聚簇索引(聚集索引) |
Clustered Index , 聚簇索引并不仅是一种单独的索引类型,而且是一种数据存储方式。 InnoDB 的聚簇索引实际上在同一个结构中保存了 B+Tree 索引和数据行。 InnoDB 的聚簇索引即主键索引。 |
二级索引(辅助索引) |
Secondary Index , 非聚簇索引, InnoDB 的二级索引索引节点存储索引值,叶子节点保存的不是指向行的物理位置指针,而是相应行的主键值,即二级索引存储索引值和主键值。 |
三、规范
正向:
1.数据库库名、表名、字段名由小写字母、数字组成,以_连接,最长32字符,
命名避免使用mysql保留字,mysql保留字见下:
https://dev.mysql.com/doc/refman/5.7/en/keywords.html
2.默认字符集 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。
3.mysql 数据库存储引擎强制使用InnoDB。
4.单个表的字段数控制在 20个以下,最好不超过50个。单个表不超过20个char 或varchar 字段
单表不超过50个纯int字段。
5.非唯一索引必须按照“idx_字段名称_字段名称[_字段名]”进行命名,
唯一索引必须按照“uniq_字段名称_字段名称[_字段名]”进行命名。
6.表中字段一律not null,用default值。
7.一般情况使用自增列或者全局递增的 ID (无分库分表则用自增列,否则用全局递增 ID ) 作为主键。
8.记录系统事件发生时间,如gmt_create,gmt_modify,使用TIMESTAMP类型,
高并发如支付的事件记录到毫秒,可采用 timestamp(3)。
反向:
9.一般禁止使用自定义函数、触发器以及外键,
有特别需要通过DBA、架构师评审通过后在设计文档说明。
10.禁止在数据库中使用存储图片、文件,视频等,文件存储在文件服务里,
数据库只存对应url.
11.禁止使用三表以及三表以上 JOIN 连接查询。
12.为发挥索引的价值,禁止在索引列上进行数学运算、函数运算(会使索引失效),禁止在
索引列上进行类型转换。
分布式:
13.分表 预计未来一年内,单表数据量 >1000 万行或单表存储容量 >10G ,考虑分表;
分表的字段上必须有索引,或者是组合索引的首列;
分表方式有取模分表,时间分表等。