| name | database-design |
| description | 数据库设计规范 —— 范式设计、索引策略、分库分表、命名约定与迁移管理 |
| category | 数据/性能 |
| loading | on-demand |
| triggers | {"keywords":["数据库设计","database design","建表","表结构","索引","schema"]} |
数据库设计规范
概述
提供关系型数据库设计的最佳实践,覆盖表结构设计、索引策略、命名规范、迁移管理和性能考量。
使用场景
- 新项目设计数据模型和表结构
- 现有表结构评审和优化
- 分库分表方案设计
- 数据迁移方案评审
核心原则
- 第三范式为准,反范式为例外:默认遵循 3NF,仅在性能瓶颈且其他优化无效时考虑反范式。
- 索引少而精:每个查询只用一个索引。为查询创建联合索引,不为每列单独建索引。
- 命名见名知意:表名用复数名词或单数实体名,字段名不用拼音和缩写,主键统一为
id。
- 所有迁移都有回滚方案:每份迁移脚本必须配套一份回滚脚本,并验证回滚后数据一致性。
- 不在数据库做业务逻辑:存储过程、触发器、视图中的业务逻辑难以测试和版本管理,优先放在应用层。
设计要点
- 字段类型选择:使用最小的合适类型(如状态码用
tinyint 而非 int),避免 NULL 滥用(设 NOT NULL + 默认值)
- 主键策略:优先自增整型或有序 UUID(ULID、Snowflake),避免随机 UUID 导致页分裂
- 时间字段:统一 UTC 存储,应用层转换时区;使用
timestamp 而非 datetime
- 软删除:统一
deleted_at 字段,所有查询默认过滤软删除记录
检查清单