数据库三大范式详解,部分依赖、完全依赖、传递依赖

数据库三大范式详解,部分依赖、完全依赖、传递依赖

**部分函数依赖:**设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

举个例子:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。

完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

举个例子:通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB.

传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

举个例子:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么成C传递依赖于A

三种范式

1 、第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列(即每个属性)都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。简而言之,第一范式就是无重复的列。
2、 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性依赖于主关键字。
3 、第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。在满足第二范式的基础上,切不存在传递函数依赖,那么就是第三范式。简而言之,第三范式就是属性不依赖于其它非主属性。
59

一、第一范式
数据库每一列都是不可分的基本数据项(原子数据项)
就比如说:下面一个数据表

编号姓名地址
001李一山东,青岛
002李二山东,济南
003李三山东,济宁

上表所示的地址,就不符合第一范式,以为地址那一列可以分为省份和市区,故可以修改为

编号姓名省份市区
001李一山东青岛
002李二山东济南
003李三山东济宁

二、第二范式
第二范式要求在满足第一范式的基础上,非码属性必须完全依赖于候选字,也就是要消除部分依赖。(完全依赖,部分依赖在后文)
就比如说:

订单号产品号产品数量产品价格订单时间订单金额
200100138.52020022425.5
200200227.52020042417
200200326.52020042417
200300128.52020032416

如上图加粗字体所示,可能对于同一个订单,含有不同的产品,因此主键必须是产品号和订单号联合组成。但可以发现产品数量、产品价格与订单号、产品号都有关,不过订单时间与订单金额仅与订单号有关,这就违反了第二范式。故可以修改为:

订单号产品号产品数量产品价格
200100138.5
200200227.5
200200326.5
200300128.5
订单号订单时间订单金额
20012020022425.5
20022020042417
20022020042417
20032020032416

三、第三范式
第三范式要求在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,即在第二范式的基础上消除传递依赖。第三范式要求数据表的每一列都与主键直接相关,而不是间接相关。
就比如说:

学号姓名性别班主任姓名班主任性别班主任年龄
2001李一陈毅35
2003李二陈毅35
2004李三王玉26
2005李四王玉26

从上表可以看出,所有属性都完全依赖于学号,故符合第三范式,但是班主任性别和班主任年龄直接依赖于班主任姓名,而不是主键学号,故不符合第三范式。可修改为:

学号姓名性别班主任姓名
2001李一陈毅
2003李二陈毅
2004李三王玉
2005李四王玉
班主任姓名班主任性别班主任年龄
陈毅35
陈毅35
王玉26
王玉26

这样就满足第三范式了。

  • 29
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值