【数据库】函数依赖、范式

函数依赖

X->Y,X决定Y,Y函数依赖于X,y=f(x)。就看成一个函数,如果一个X对应一个Y,那就是X->Y;如果两个X相同,但是Y不同就不是X->Y。

比如:学号和姓名是依赖关系,学号可以决定姓名,姓名依赖于学号

年龄和专业不是依赖关系,两个人都是18岁,一个计算机专业,一个物理专业。

平凡/非平凡函数依赖

非平凡函数依赖:(学号,课程)->课程成绩

平凡函数依赖:(学号,课程)->学号、(学号、课程)->课程

主要讨论的是非平凡的函数依赖。

部分/完全函数依赖

现有三个属性:学号、课程号、课程得分

学号+课程号才能决定课程得分。(单有学号,一个学生选多个课,不知道是那个课的成绩、单有课程号,选这个课的有很多学生,不知道是哪个学生的成绩)

(学号,课程)->课程得分。

从(学号,课程)中任意取出真子集:学号、课程都不能决定课程得分。这种情况就是完全依赖(课程得分完全函数依赖于(学号,课程))。【完全依赖是指不能仅依赖候选键一部分的属性】

假如数据集比较特殊,从(学号,课程)中取出的某一个真子集,比如学号可以决定课程得分了。那这种情况就是部分依赖(课程得分部分函数依赖于(学号,课程))。

传递依赖

A->B->C    可得出A->C

数据库范式

1NF:保证了原子性

2NF:去除非主属性对主属性的部分依赖

3NF:去除非主属性对主属性的传递依赖

BCNF:消除主属性对主键的部分依赖和传递依赖

4NF:消除表中的多值依赖

解决方法:1NF通过拆分列解决;其他通过拆分表解决(拆表解决依赖性)

1NF

第一范式符合数据表的原子性。每一个属性都不可再分。

2NF

在1NF的基础上,表中的非主属性必须完全依赖于主属性。

3NF

表中所有数据元素不但要能唯一的被主关键字标识,他们之间还必须相互独立,不存在其他的函数关系。即在2NF的基础上消除了传递函数依赖。符合第三范式的数据表,消除了数据冗余、更新异常、插入异常和删除异常。

BCNF(3.5NF)

消除主属性对主键的部分与传递依赖。

4NF

消除表中的多值依赖。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值