Files
telecom-rd-project-template/.agents/references/quick-guides/04-database-design.md
T
2026-07-28 22:30:20 +08:00

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
  • 【强制】 禁止更新分片键值