MySQL-12-范式数据库的设计
当数据库比较复杂时,需要设计数据库
比较
糟糕的数据库设计 | 良好的数据库设计 |
---|---|
数据冗余,浪费空间 | 节省内存空间 |
物理外键的滥用,使得数据库的插入和删除变得麻烦,异常 | [屏蔽使用物理外键]保证数据库的完整性 |
程序的性能差 | 方便系统的开发 |
三大范式
为什么需要数据规范化?
- 信息重复
- 更新异常
- 插入异常
- 无法正常显示信息
- 删除异常
- 丢失有效的信息
第一范式(1NF)
原子性:数据库的每一列都不可再分
第二范式(1NF)
前提:满足第一范式
每张表只描述一件事情
第三范式(1NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
规范性vs性能
关联查询的表最好不超过三张
- 考虑商业化的需求和目标,(成本+体验)性能>规范
- 在追求性能的同时,适当的考虑规范性
- 在某些情况下,可能需要给某些表添加冗余字段(变多表查询为单表查询)
- 在某些情况下,可能需要增加一些计算列(化大数据量为小数据量[添加索引])