83.数据库如何解决数据冗余问题?84.关系范式

数据库范式能帮忙解决数据冗余问题
1.第一范式(1NF)
关系里的属性不能够拆分。
在这里插入图片描述
在这里插入图片描述
第一个不符合第一范式,第二个表才符合。
2.第二范式(2NF)
在1NF的基础上,且每一个非主属性完全函数依赖于任何一个候选码
就是说主属性决定不了非主属性,但是非主属性依赖于候选码
在这里插入图片描述
候选码:学号+姓名+课名
那么主属性:学号 姓名 课名
非主属性:系名,系主任、分数
首先这个表是第一范式,但是很明显非主属性不完全依赖候选码。比如系名就跟学号和姓名和课名没多大关系。
所以我们拆成
在这里插入图片描述
先看第一个表,学号跟课名是候选码。
主属性:学号、课名。非主属性:分数。
分数取决于学号+课名。
但是课名决定不了分数,还得加分数。
第二个表格
候选码:学号
主属性:学号
非主属性:姓名,系名,系主任。
学号可以决定学号,但是学号决定了系名和系主任。
所以也是第二范式。
分数
3.第三范式(3NF)
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
传递依赖
在上面拆成的第二个表中是符合2NF,但是系主任取决于系名,系名取决于学号。这种就是传递依赖。所以这个表不符合3NF。
在这里插入图片描述
把它拆成以上两个表,就不会存在传递依赖了。

总结一下:
1NF是为了解决属性可再拆分的数据冗余。
2NF是为了解决部分非主属性不依赖所有候选码。
部分非主属性只取决于部分候选码,那么就要拆表。拆成所有非主属性取决于所有候选码
3NF是为了解决 非主属性虽然取决于所有候选码,但是部分非主属性之间有依赖关系 比如说 地名跟邮政编码一般都是会有依赖关系的,就会形成传递依赖。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页