1. 范式
范式 | 概念 |
---|---|
第一范式 | 确保每一列都保证原子性 |
第二范式 | 在第一范式的基础上,确保每一列都跟主键相关 |
第三范式 | 在前2个范式的基础上,确保每列都跟主键直接相关,而不是间接相关 |
1.2 第二范式
举例说明:
- 比如要设计一个订单表,这个订单表将订单号和商品编号作为联合主键。
- 这样就产生一个问题,该表中的商品详情不该与订单号主键相关联,而仅仅是与商品编号相关联,这样就不满足第二范式。
- 因此,需要对这个表进行拆分,拆分为订单表(订单号),订单详情(订单号,商品编号,没有商品详情),商品表。
1.3 第三范式
举例说明:
- 设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。
2. 如何设计数据库
2.1 设计步骤
- 需求分析,画出E-R图
- 根据模型设计数据库
- 写代码测试和部署
2.2 设计原则
- 关联表不超过3张表
- 更多考虑商业化需求和目标(成本以及用户体验)性能更加重要
- 在规范性能满足的情况下适当考虑一下规范性
- 故意给某些字段增加冗余字段(将多表查询改为单表查询)
- 故意增加计算列将大数据量降为小数据量查询:索引
参考资料: