数据库部分函数依赖、传递函数依赖的区别以及范式判断

说到部分函数依赖,传递函数依赖,必须谈到2个概念,“非主属性”和“主属性”。

主属性:组成候选码的属性,就是主属性。例如,属性集{学号,姓名,身份证号码,联系电话},学号是主键。学号,身份证号码都是候选码,都属于主属性。可以看出,主键不一定包含所有的主属性。

非主属性:除去主属性,就是非主属性。示例中,姓名,联系电话,是非主属性。

部分函数依赖与传递函数依赖,网上有很多,但大多都是概念,不好理解。我这里给出1个比较容易理解的定义:

部分函数依赖:当1个关系模式中主键由2个及以上的属性组成时,非主属性只依赖于其中1个主属性,就是部分函数依赖。举例,属性集{学号,姓名,联系电话,教师编号,教师姓名},主键是2个主属性(学号+教师号),教师编号决定了教师姓名,所以教师姓名依赖于教师编号,不依赖于学号,教师姓名只依赖于主键的其中1个主属性,所以就是部分函数依赖。

与部分函数依赖相反的是“完全函数依赖”。完全函数依赖是:非主属性完全依赖于主属性。举例1,属性集{学号,课程号,成绩},学号和课程号是主键,学号和课程号一起决定成绩,所以成绩完全依赖于学号和课程号,就是完全依赖。举例2,属性集{学号,姓名,联系电话},学号是主键,学号决定姓名,学号决定联系电话,姓名依赖学号,联系电话依赖学号,也是完全依赖。

传递函数依赖:当关系模式中,出现非主属性决定非主属性时,就是传递函数依赖。举例,属性集{学号,姓名,学校编号,学校名称},主键是学号,学号决定学校编号,学校编号决定学校名称,且学校编号、学校名称都属于非主属性,那么就是传递函数依赖。

范式判断,我就不说那些课本概念了,我做一下通俗易懂的定义:

1NF:  属性不可再分(数据库表中的每一列都是不可分割的基本数据项)

2NF:满足1NF且非主属性均完全函数依赖于候选键。

3NF:满足2NF且非主属性没有传递依赖于候选键。

BCNF:满足3NF、且主属性完全函数依赖于候选键、且主属性没有传递依赖与候选键。

2NF、3NF,解决是非属性对候选键的依赖问题。

BCNF,解决的是主属性对候选键的依赖问题。

  • 31
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值