数据库设计规范
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_a4c2f3d2/design-db。
技能介绍
问题从哪来
多人协作或项目拉长周期后,表结构往往会出现命名风格混用、VARCHAR 不给长度、金额用浮点、外键没索引、审计字段一套 created_at 另一套 gmt_create 等问题。这类细节不会立刻让服务挂掉,但会让 SQL 难读、迁移风险变高,线上排查也更费时间。
技能在约束什么
本规范把关系型库(以 MySQL 常见实践为主)的设计拆成可执行的约定,适合在 建表评审 或 DDL 合并前 对照使用。
- 命名:表用小写复数 + 下划线;关联表
{表A}_{表B}按字母序;列用user_id、is_active、created_at;索引用idx_/uk_前缀。 - 必备字段:
id、created_at、updated_at,审计需要时补created_by/updated_by;同一项目只选一种审计命名风格,禁止混用。 - 类型:主键与计数用
BIGINT;金额DECIMAL(18,2);时间DATETIME;布尔用TINYINT+ 注释,避免滥用ENUM。 - 索引:为 WHERE、JOIN、ORDER BY、GROUP BY 与唯一业务键建索引;组合索引遵循等值在前、区分度高的列在前、最左前缀;避免低基数单列索引与大字段索引。
- 关系与软删:1:N、N:M、树形与版本化有对应实现方式;软删用
is_deleted或deleted_at,唯一约束需把删除标记纳入设计。 - 迁移:DDL 进版本控制,变更尽量前向兼容,破坏性修改分步发布;生产环境慎删表、删列、改名。
文末 严禁清单 汇总了主键缺失、SELECT *、外键无索引、NULL 滥用、单表列数过多等常见反模式。
适用边界
规范偏 工程约定与评审清单,不替代具体业务的容量规划、分库分表方案或 ORM 映射细节。外键可选物理约束或逻辑外键,但无论哪种,外键列都应建索引。反范式冗余字段必须写清原因,避免为省一次 JOIN 而长期背负数据不一致。
使用场景
- 新表 DDL 进代码评审前,按命名、必备字段与类型表逐项核对,避免 `FLOAT` 存金额或外键无索引。
- 多服务共用库时,统一表前缀、审计字段风格与索引命名,禁止 `created_at` 与 `gmt_create` 混用。
- 为列表/筛选接口设计组合索引,对照 WHERE、JOIN、ORDER BY 检查等值列在前与最左前缀是否成立。
- 上线软删除方案时,确定 `is_deleted` 或 `deleted_at`,并把唯一约束与手写 SQL 过滤条件一并改完。
适合人员
- 负责从需求落表的后端工程师,需要主键、外键列与索引在首版 DDL 里就写对。
- 审阅 DDL 合并请求的 DBA 或架构师,要用严禁清单拦截 ENUM、无长度 VARCHAR 与生产直删列。
- 制定团队建模标准的技术负责人,要在文档里固定一种审计字段命名并写入评审流程。
- 维护 Flyway/Liquibase 迁移脚本的开发,需要前向兼容、分步删列与 DDL 全部进版本控制的铁律。