MySQL三范式与反三范式

MySQL三范式与反范式

(参考CS-NOTES : http://www.cyc2018.xyz/数据库/数据库系统原理.html#范式)

三范式基本内容

第一范式(1NF)

属性不可再分;

即表中的字段不能再拆分

例: 一个Name属性可以分为FirstName属性LastName属性,则不符合第一范式。

第二范式(2NF)

表中有键码,非主属性完全依赖键码;

即表中的非主属性完全依赖于键码,可以根据键码去获取。

例:

Sno Sname Sdept Mname Cname Grade
1 学生-1 学院-1 院长-1 课程-1 90
2 学生-2 学院-2 院长-2 课程-2 80
2 学生-2 学院-2 院长-2 课程-1 100
3 学生-3 学院-2 院长-2 课程-2 95

以上学生课程关系中,{Sno, Cname} 为键码,有如下依赖关系:

  • Sno -> Sname, Sdept
  • Sdept -> Mname
  • Sno, Cname-> Grade(只有Grade完全依赖键码)

可以分解为

​ 表1

Sno Sname Sdept Mname
1 学生-1 学院-1 院长-1
2 学生-2 学院-2 院长-2
3 学生-3 学院-2 院长-2

有以下函数依赖:

  • Sno -> Sname, Sdept

  • Sdept -> Mname

    ​ 表2

Sno Cname Grade
1 课程-1 90
2 课程-2 80
2 课程-1 100
3 课程-2 95

有以下函数依赖:

  • Sno, Cname -> Grade

第三范式(3NF)

非主键字段不能相互依赖;

即非主键字段与主键不能存在传递依赖。

例:表1中Sno -> Sdept -> Mname,存在传递依赖;

​ 可以分解为表2和表3将依赖分解为Sno -> SdeptSdept -> Mname

(表1)

Sno Sname Sdept Mname
1 学生-1 学院-1 院长-1
2 学生-2 学院-2 院长-2
3 学生-3 学院-2 院长-2

(表2)

Sno Sname Sdept
1 学生-1 学院-1
2 学生-2 学院-2
3 学生-3 学院-2

(表3)

Sdept Mname
学院-1 院长-1
学院-2 院长-2

反三范式

反三范式的理由

  • 三范式优缺点

优点:

  1. 减少数据冗余

  2. 范式化的更新操作比反范式化更快

  3. 范式化的表比反范式化的表更小

缺点:

  1. 查询经常需要关联多个表
  2. 难以进行索引优化
  • 反三范式优缺点

优点:

  1. 可以减少表的关联
  2. 可以设计有效的索引,便于索引优化

缺点:

  1. 存在较多冗余数据
  2. 修改数据的维护成本较高

对于三范式和反三范式的选择

在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。

posted @ 2021-03-29 14:22  Zzzkis  阅读(145)  评论(0编辑  收藏  举报