1)三大范式 概念: 在设计数据库时,需要遵循的一些规范就叫做范式。
(1)1NF: 每一项都是不可分割的原子数据项
学号 姓名 系名 系主任 课程名称 分数
10010 张无忌 经济系 张三丰 高等数学 95
10010 张无忌 经济系 张三丰 大学英语 95
10010 张无忌 经济系 张三丰 计算机基础 95
10011 令狐冲 法律系 任我行 法理学 95
10011 令狐冲 法律系 任我行 大学英语 95
10011 令狐冲 法律系 任我行 法律社会学 95
问题:
1.存在非常严重的数据冗余(重复): 姓名、系名、系主任
2.数据添加存在问题,添加新开设的系和系主任时.数据不合法
3.删除数据也存在问题,张无忌同学毕业了,删除数据会将系的数据一起删除
(2)2NF: 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的 ‘部分函数依赖’)
几个概念:
1.函数依赖 A-->B, 如果通过A的属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A。 如: 根据学号找到人
2.完全函数依赖:
属性组: 如: (通过学号 + 课程名称) --> 分数, 则称(通过学号,课程名称)是属性组.
如果A是一个属性组,则B属性组的确定需要依赖于A属性组中的所有的属性值
3.部分函数依赖:
如果A是一个属性组,则B属性组的确定需要依赖于A属性组中的某一个的属性值即可
例如: (学号, 课程名称) -->姓名 其实通过学号就能确定姓名
4.传递函数依赖:
A-->B B --》C
如果通过A属性(属性组)的值,可以确定唯一B属性的值, 在通过B属性(属性组),又可以确定唯一C属性的值
如:学号--》系名--》系主任
5.码: 如果在一张表中,一个属性或属性组,被其它所有属性所完全依赖,则称这个属性(属性值)为该表的码
例如: (学号,课程名称)
主属性: 码属性组中的所有属性
非主属性:出去码属性组的属性
-----选课表-----
学号 课程名称 分数
10010 高等数学 95
10010 大学英语 95
10010 计算机基础 95
10011 法理学 95
10011 大学英语 95
10011 法律社会学 95
-----学生表-----
学号 姓名 系名 系主任
10010 张无忌 经济系 张三丰
10011 令狐冲 法律系 任我行
依然存在2个问题:
2.数据添加存在问题,添加新开设的系和系主任时.数据不合法。 如:新开了计算机系 系主任时殷天正。
3.删除数据也存在问题,张无忌同学毕业了,删除数据会将系的数据一起删除
(3)3NF: 在 2NF的基础上,任何非主属性不依赖于其它非主属性(2NF基础上消除传递依赖项)
学号--》系名--》系主任, 因此系主任传递依赖于学号, 3NF要消除这个
-----选课表-----
学号 课程名称 分数
10010 高等数学 95
10010 大学英语 95
10010 计算机基础 95
10011 法理学 95
10011 大学英语 95
10011 法律社会学 95
-----学生表-----
学号 姓名 系名
10010 张无忌 经济系
10011 令狐冲 法律系
-----系表-----
系名 系主任
经济系 张三丰
法律系 任我行
因此: 3NF中, 3个问题被解决
(4)巴斯-科德范式
(5)4NF
(6)5NF