数据库范式

来源:互联网 发布:中学生学编程学什么好 编辑:程序博客网 时间:2024/06/06 11:24
1.数据模型回顾:层次模型、网状模型、关系模型、多维模型;
2.数据依赖对关系数据库的影响:数据冗余、更新异常、插入异常、删除异常;
示例:关系模型
·一个教师只有一个地址(户口所在地);
·一个教师可教多门课程;
·一门课程只有一个任课教师;
3.问题1:数据冗余,教师T1教了三门课程,他的地址被重复了2次;
问题2:更新异常,如果T1的地址变了,则需要改变3个元组的地址;若有一个未更改,就会出现数据不一致。但DBMS无法获知这种不一致;
问题3:插入异常,如果要增加一名教师,但他还未带课,则课程ID和课程名字为空,但由于课程ID是主码,为空违反了实体完整性,所以这名教师将无法插入到数据库中;
问题4:删除异常,如果教师T3现在不带课了,则需要将T3的元组删去,但同时也把他的新明和地址信息删掉了。

4.方法:模式分解
方法1:将表分解为教师表(教师名,地址)和课程表(课程ID,课程名)——-->授课信息丢失
方法2:将表分解为教师表(教师名,地址,课程ID)和课程表(课程ID,课程名)——>表中的问题依然存在
方法3:将表分解为教师表(教师名,地址)和课程表(教师名,课程ID,课程名)——>基本解决问题

5.规范化理论
结论:关系模式不是一个好的模式,“好”的模式不会发生插入异常、删除异常、更新异常、数据冗余尽可能少;
原因:由存在于模式中的某些数据依赖引起的;
解决方法:通过分解关系模式来消除其中不适合的数据依赖;
规范化理论:用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题;

6.函数依赖
关系模式:对关系的描述,它由五部分组成:
·R(U,D,Dom,F);
·R为关系模式名;
·U是一个属性集;
·D是U中属性的值所来自的域;
·Dom是属性向域的映射集合;
·F是属性间的依赖关系;
函数依赖:
设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R(U)的任意一个可能的关系r,如果r中不存在两个元组,它们是在X上的属性值相同,而在Y上的任意属性值不同,则称“X函数确定Y”或“Y函数依赖于X”,记作X——>Y;
换一种说法:设关系模式(A1,A2,...,An)或简记为R(U),U是R的属性集合,X和Y是U的子集。r是R的任意一个实例(关系),若r的任意两个元组t1,t2,由t1[X]=t2[X]可导致t1[Y]=t2[Y],即如果X相等则Y也相等,则称Y函数依赖于X或称为X函数决定Y,记作X——>Y;
即R的X属性集上的值可唯一决定R的Y属性集上的值;
也即对于R的任意两个元组,X上的值相等,则Y上的值也必相等;
函数依赖的多对一关系
·函数依赖实际上是指一个关系模式中的一个属性集和宁一个属性集间的多对一关系;
·例如选课关系SC(S#,C#,Score)存在由属性集{S#,C#}到属性集{Score}的函数依赖;
对于任意给定的S#值和C#值,只有一个Score值与其对应;
反过来,可以存在多个S#值和C#值,它们对应的Score值相等;

7.码
定义:设K为关系模式R(U,F)中的属性或属性集合,若K?U,则K为R的候选码(Candidate Key),若候选码多于一个,则定义其中一个为主码(Primary Key)。
主属性、非主属性、全码。
定义:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外码。
码是关系模式中的一个重要概念。
候选码能够唯一的标识关系的元组;是关系模式中一组最重要的属性。
主码又和外码一起提供了一个表示关系间联系的手段。

8. 范式详解
·第一范式:数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等;
·第二范式:数据库表中不存在非关键字段对任意候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
例子:
学生:Student(学号,姓名,年龄)
课程:Course(课程名称,学分)
选课关系:SelectCourse(学号,课程名称,成绩)
·第三范式:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字的传递函数依赖则符合第三范式,所谓传递函数依赖,指的是如果存在“A——>B——>C”的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段——>非关键字段x——>非关键字段y

9.总结
1NF:确保每列的原子性;
2NF:确保表中的每列,都和全部主键相关;
3NF:确保每列都和主键列直接相关,而不是间接相关;
原创粉丝点击