关系数据库范式快速识别方法--第几范式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_28729797/article/details/50634978

这几天做web项目设计数据库,深深感觉到范式的重要,查阅资料后,研究如下

解决数据冗余(例如同一个属性值出现N次),更新异常(例如更改某人年龄,所有相关都需改),插入异常(主属性无,只有非主属性,插不进去),删除异常等,引入函数依赖。

首先我们看看函数依赖定义:

设R(U)是一个属性集U上的关系模式,X,Y是U的子集,若对R(U)上任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称为“X函数确定Y“或者”Y函数依赖于X“,记为X--->Y.X称为这个函数依赖的决定属性集。简单来说,如果一个表中某一个字段Y的值是由另一个字段或一组字段X来确定的,就称为函数Y依赖于X。

1、第1范式:1NF

数学定义:

如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。属性不可拆。

2、第2范式:2NF

数据库中通常加入id,使得所有属性完全依赖于关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。

通常在复合主键中,例如

有选课关系表 (学号, 姓名, 年龄, 课程号, 成绩, 学分),关键字为组合关键字(学号, 课程号),存在如下决定关系

(学号)------>(姓名,年龄)

 (课程号)-------->(学分)

 由于上面存在组合关键字中的部分字段决定非关键字的情况,因此不满足2NF。这种现象有种官方说法叫做:局部函数依赖:指存在组合关键字中的某些字段决定非关键字段的情况。故需拆分

数学定义:若关系模式R∈1NF,并且每一个非主属性都完全依赖于R的码,则R∈2NF

3、第3范式:3NF

百度上有一句对第3NF非常经典的解释:“简而言之,第三范式就是属性不依赖于其它非主属性。”

官方加高大上解释如下:“传递函数依赖:指如果存在X → Y,且Y → Z,则Z传递函数依赖于X。3NF指在2NF的基础上,数据表中不存在非关键字段对任一候选关键字段的传递函数依赖。”

例如学生档案表(学号,姓名,年龄,生源地编号,生源地,邮政编码)

学号---->生源地编号

生源地编号----->生源地,邮政编码

上面可知,存在非关键字段生源地,邮政编码对关键字学号传递函数依赖,故不符合3NF

4、BCNF

不存在任何字段对任一候选关键字段的传递函数依赖

大家常用解释如下:

寝室管理关系表 (寝室ID,室长ID,物品ID,数量),选主键的时候

寝室ID物品ID)---->(室长ID,数量

也可以

室长ID物品ID)------>(寝室ID数量)

也就是说寝室ID物品ID中的寝室ID可被室长ID决定,反过来也成立。故此表该拆分。不符合BCNF

5、4NF

官方说法如下:多值依赖:表示属性间的一种依赖关系,如有属性X、Y、Z,对于X的每个值,Y有一个值集,Z有一个值集,并且Y的值集和Z的值集彼此独立。

例如(商品,买商品的客户,附赠品)

商品)-->-->(买商品的客户),

商品)-->-->(附赠品

都是1:N关系,且联系独立,存在多值依赖关系。




展开阅读全文
博主设置当前文章不允许评论。

没有更多推荐了,返回首页