文章目录
- 6.数据库设计三大范式
- 6.1第一范式
- 6.2第二范式
- 6.3第三范式
- 6.4反范式设计
6.数据库设计三大范式
6.1第一范式
-
第一范式(1NF):确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式是所有关系型数据库的最基本要求。
-
不符合第一范式:
-
符合第一范式:
6.2第二范式
-
定义:在第一范式(1NF)的基础上建立起来的,要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖
-
特点:
- 要求符合第一范式
- 表必须有一个主键(一列或多列)
- 其他字段可由主键确定
- 二范式目的是通过拆表减少数据冗余
-
总结:根据主键或者联合主键,将一个表最有关联的属性分别放在一起
-
例子:根据主键拆分成课程表和学生表(问题:学号即主键列和系名、系主任即非主键列完全依赖,修改麻烦)
6.3第三范式
-
定义:第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖
-
特点:
- 要求符合第二范式
- 字段要求直接依赖于主键,不允许间接依赖
- 第三范式目的在于拆分实体(完善主从表)
-
例子:
6.4反范式设计
- 没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。
- 具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率。
- 优点:
- 单表查询易于优化,易于管理;
- SQL语句简单,利于程序开发
- 缺点:
- 存在数据冗余,写操作时,需要额外更新从表数据
- 不合理的反范式设计,让表变得很臃肿