程序员人生 网站导航

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

栏目:数据库应用时间:2015-06-17 09:01:02

函数依赖:

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


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



可以理解为X能唯1肯定Y,则X--->Y。经常使用为主键------>其他属性

 

函数依赖和3范式

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

 

完全依赖和1范式

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

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

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

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

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

                                  2、强迫只能选择1个号码属性。


2范式消除部份依赖

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

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

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

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

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

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

 

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


3范式消除传递依赖

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

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

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

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

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

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

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


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




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐