数据库设计二《函数依赖和三范式》

来源:互联网 发布:图表数据区域格式 编辑:程序博客网 时间:2024/06/04 22:46

函数依赖:

定义:R(U)是在属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能关系r,r中的不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或者Y函数依赖X,记作X--->Y。


单纯的概念有点难以理解,通过例子1:属性集U,关系模式R(U),子集X,Y,可能关系r1。



可以理解为X能唯一确定Y,则X--->Y。常用为主键------>其他属性

 

函数依赖和三范式

函数依赖的分类:完全依赖,部分依赖,传递依赖。

 

完全依赖和一范式

完全依赖:X--->Y。Y只能有X推到出来

     例子2:选课关系(学号,课程号,成绩)
               (学号,课程号)--->成绩

     一范式:主要确定属性的原子性,每个属性不可再分。

     例子3:职工号,姓名,电话号码组成一个表(电话号码有包括手机号,家庭号码)

                修改方法:1、新建一个表,职工号为主键,添加手机号和家庭号码两个属性。

                                  2、强制只能选择一个号码属性。


二范式消除部分依赖

部分依赖:X--->Y Y除了能有X推到出来外还可以有其他属性推到出来。

     例子4:选课关系(学号,课程号,成绩,课程名)

               (学号,课程号)--->课程名,   课程号--->课程名

     二范式:非主键属性完全依赖主键,二范式的作用主要是消除部分依赖。

     例子4可以改为两个关系模式:选课关系(学号,课程号,成绩,课程名)

                                                      课程关系(课程号,课程名)

 

主键是组合属性的时候容易出现部分依赖,主键是单个属性的时候只要符合第一范式就会符合第二范式。


三范式消除传递依赖

传递依赖:X--->Y 、Y--->Z 则X--->Z

     例子5:选课关系(学号,姓名,专业号,专业名,所属学院号)

     学号--->专业号,专业号--->专业名。

     三范式:在符合二范式的基础上,没有非主属性传递依赖函数。

     例子5解决方法:转换成两个关系模式,消除传递依赖。

             选课关系(学号,姓名,成绩)

             专业关系(专业号,专业名,所属学院号)


三范式作为数据库设计的一个标准,确保非主键属性都完全依赖主键属性。




3 0