讲讲MySQL 数据表设计规范

讲讲MySQL 数据表设计规范
最新回答
花若怜

2026-10-28 00:25:19

数据命名规范

数据库基本设计规范包括:所有表必须使用 InnoDB 存储引擎,数据库和表的字符集统一使用 UTF8MB4,所有表和字段都需要添加注释,尽量控制单表数据量的大小在 500 万以内,谨慎使用 MySQL 分区表,做到冷热数据分离,禁止在表中建立预留字段,禁止在数据库中存储图片、文件等大的二进制数据,禁止在线上做数据库压力测试,禁止从开发环境、测试环境直接连接生成环境数据库。

数据库字段设计规范要求优先选择符合存储需要的最小的数据类型,避免使用 TEXT、BLOB 和 ENUM 类型,尽可能把所有列定义为 NOT NULL,使用 TIMESTAMP 或 DATETIME 存储时间,对于财务相关的金额类数据必须使用 decimal 类型。

索引设计规范包括限制每张表上的索引数量不超过 5 个,禁止给表中的每一列都建立单独的索引,每个 InnoDB 表必须有主键。常见索引列建议用于优化查询性能,避免建立冗余索引和重复索引,优先考虑使用覆盖索引,以及充分利用表上已存在的索引。

索引 SET 规范要求数据库 SQL 开发中使用预编译语句以减少 SQL 编译时间,避免隐式转换导致的索引失效,充分利用表上已存在的索引,考虑数据库设计的扩展性,使用不同的账号连接不同的数据库,禁止跨库查询,禁止使用 SELECT *,必须使用 SELECT 查询,避免使用子查询,将子查询优化为 JOIN 操作,避免 JOIN 关联太多表,减少数据库交互次数,对应同一列进行 OR 判断时使用 IN 代替 OR,禁止使用 ORDER BY RAND() 进行随机排序,避免 WHERE 从句中的函数转换和计算。

数据库操作行为规范要求对超 100 万行的批量写操作分批进行,使用 pt-online-schema-change 修改大表结构,禁止为程序使用的账号赋予 super 权限,遵循权限最小原则,程序连接数据库账号只能在一个 DB 下使用,不准跨库,程序使用的账号原则上不准有 drop 权限。