5.9 KiB
5.9 KiB
04-数据库设计规范
涵盖通用规范及 MySQL、PostgreSQL、TiDB、UDAL 四种主流数据库
一、通用设计规范
命名规范
| 对象 | 规则 |
|---|---|
| 库名 | 【强制】仅字母/数字/下划线,全小写,≤32字符,禁止关键字 |
| 表名 | 【强制】仅字母/数字/下划线,全小写,t_ 开头,≤32字符 |
| 字段名 | 【强制】全小写,下划线分隔,≤32字符,禁止关键字 |
| 索引 | 【推荐】非唯一=idx_字段1_字段2,唯一=uidx_字段1_字段2,全小写 |
| 用户名 | 【推荐】库名_app(生产)、库名_read(只读)、库名_monitor(监控) |
| 临时表 | 【强制】tmp 开头 + 日期后缀 |
| 备份表 | 【强制】bak 开头 + 日期后缀 |
SQL 设计规范
- 【强制】 创建表时所有表和字段必须添加注释
- 【强制】 禁止使用外键(业务端实现)
- 【强制】 SELECT/UPDATE/DELETE 的 WHERE 条件列必须添加索引(低基数列除外)
- 【强制】 WHERE 条件索引列禁止数学运算和函数运算
- 【强制】 禁止 LIKE
%xxx前缀模糊匹配 - 【强制】 禁止在开发代码中使用 TRUNCATE TABLE
- 【强制】 DELETE/UPDATE 必须带 WHERE 条件
- 【强制】 SELECT 语句必须指定具体字段,禁止
SELECT * - 【强制】 SQL 语句禁止隐式转换
- 【推荐】 事务要简单,多事务小事务原则
- 【推荐】 避免超过 3 张表关联
- 【推荐】 IN 操作集合元素控制在 500 个以内
流程规范
- 【强制】 DDL 操作至少提前 1 天向 DBA 申请
- 【强制】 批量读写超过 5 万条记录必须通知 DBA
- 【强制】 业务高峰期禁止大批量更新(超 10 万条)/ALTER 表/创建索引
- 【强制】 禁止从开发/测试环境直连生产数据库
- 【强制】 严禁在从库执行 SELECT 以外的语句
- 【强制】 禁止在主库执行导出操作
- 【强制】 生产数据导出到非生产环境需脱敏处理
- 【强制】 创建用户时限制登录主机(IP/网段),禁止
% - 【强制】 密码复杂度 ≥ 16 位,包含大小写+特殊字符
- 【推荐】 生产表结构应设有主键
- 【推荐】 对超 100 万行大表修改结构须 DBA 审核,低峰期执行
设计范式
- 逻辑模型满足第三范式即可
- 物理模型可适当增加数据冗余以提高查询性能
二、PostgreSQL 开发规范
对象命名
- 【强制】 DB name 与 table name ≤ 64 位
- 【强制】 对象名仅小写字母、数字、下划线
- 【推荐】 主键索引
pk_开头,唯一索引uidx_开头,普通索引idx_开头 - 【推荐】 不同业务用不同 database 区分,默认使用 public schema
设计规范
- 【强制】 创建表结构时需考虑对应索引
- 【强制】 多表 join 列需保证列名和数据类型一致
- 【强制】 表结构类型与应用程序定义一致
- 【推荐】 字符编码 UTF-8,时间使用 UTC
- 【强制】 避免使用触发器
- 【强制】 大表(>10GB 或 >1000 万行)考虑分区
- 【强制】 频繁使用的大对象需定时删除
查询规范
- 【强制】 禁止
SELECT * - 【强制】 使用
count(*)而非count(col)或count(1) - 【强制】 避免向客户端返回大量数据
稳定性
- 【强制】 避免长事务(会造成垃圾膨胀)
- 【强制】 程序必须有重连机制
- 【强制】 使用合理的隔离级别
- 【强制】 高并发下务必使用连接池
- 【强制】 OLTP 高峰期拒绝长 SQL、大事务、大批量
三、MySQL 开发规范
对象设计
- 【强制】 INT 不使用 unsigned 无符号属性
- 【强制】 自增用 8 字节 BIGINT
- 【强制】 字符集使用 UTF8MB4
- 【强制】 日期使用 DATETIME 类型
- 【强制】 敏感字段需加密(动态盐 + 非固定加密算法 + 多轮加密)
数据操作
- 【强制】 禁用
UPDATE/DELETE ... LIMIT - 【强制】 禁用关联子查询
- 【强制】 禁用
INSERT ... ON DUPLICATE KEY UPDATE - 【强制】 禁用联表更新
- 【强制】 生产环境禁止使用 hint
查询优化
- 【推荐】 SELECT 建议 UNION ALL(不超过 5 个子句)
- 【强制】 DML 语句必须有 WHERE 条件,且使用索引查找
- 【推荐】 order by/group by/distinct 尽量利用索引
四、TiDB (HTAP) 开发规范
核心约束
- 【强制】 单行数据 ≤ 6 MB,单表字段 ≤ 60 个
- 【强制】 单个事务默认 ≤ 100 MB,大事务需拆分(每 100~500 行一批)
- 【强制】 建表使用 utf8mb4 编码
- 【强制】 禁止
SELECT * - 【强制】 高并发交易场景,单语句关联表 ≤ 2 张;分析场景 ≤ 10 张
- 【强制】 自增列仅保证唯一,不保证连续/有序
分区表
- 【强制】 查询条件必须包含分区字段
- 【推荐】 分区记录数控制在十亿级别
五、UDAL 开发规范
核心约束
- 【强制】 对象名仅小写字母、数字、下划线,≤ 32 位
- 【强制】 表必须设置主键
- 【强制】 禁止使用外键、分区表、存储过程、函数、触发器、视图
- 【强制】 字符集仅 utf8/utf8mb4
- 【强制】 存储引擎必须为 InnoDB
查询规范
- 【强制】 查询必须带 WHERE 条件,尽量使用分片键
- 【推荐】 避免跨分片 Join/Union
- 【强制】 关联表分片算法和拆分节点必须一致
数据操作
- 【强制】 禁止不带 WHERE 的 Update/Delete
- 【强制】 禁止 Truncate table
- 【强制】 禁止 Update/Delete 带 LIMIT 或 ORDER BY
- 【强制】 禁止更新分片键值