程序员如何做「数据库设计」:不是画表,是数据建模
数据库是系统的核心,数据库设计决定系统的天花板。
设计好的数据库扩展性强、查询效率高;设计差的是技术债的开始。
一、数据库设计的步骤
1. 需求分析
- 系统要存储什么数据
- 数据之间的关系是什么
- 查询场景有哪些
2. 概念设计
用 ER 图描述实体和关系。
- 用户买了商品
- 订单属于用户
- 商品属于分类
3. 逻辑设计
把 ER 图转换成表结构:
- 哪些是实体表
- 哪些是关系表
- 主键外键怎么设
4. 物理设计
- 选择数据库类型(MySQL/PostgreSQL/MongoDB)
- 字段类型选择
- 索引设计
- 分表策略
二、好的数据库设计特征
1. 数据完整性
- 主键唯一
- 外键关联
- 非空约束
- 数据类型正确
2. 查询效率
- 字段类型合适
- 常用查询有索引
- 避免全表扫描
3. 可扩展
- 表结构稳定
- 预留扩展字段
- 历史数据处理方案
4. 规范化
- 1NF:字段不可再分
- 2NF:非主键字段完全依赖主键
- 3NF:非主键字段不传递依赖主键
三、常见的数据库设计问题
1. 过度设计
- 关联太多表,查询复杂
- 过早考虑性能,结构复杂
2. 欠缺设计
- 所有数据放一张表
- 没有主键
- 字段命名混乱
3. 违反规范化
- 数据冗余
- 更新异常
- 删除异常
四、索引设计
1. 什么时候建索引
- WHERE 条件常用字段
- JOIN 条件字段
- ORDER BY 字段
2. 索引类型
- B+Tree:范围查询
- Hash:精确匹配
- 复合索引:多字段组合
3. 注意事项
- 索引不是越多越好
- 写入变慢
- 占用空间
五、一句话总结
数据库设计 = 需求分析 + 概念设计 + 逻辑设计 + 物理设计,核心是数据完整性和查询效率的平衡。