数据库范式理论

目录

1、1NF

2、2NF

3、3NF

4、BCNF

5、4NF


1、1NF

在实际应用中,数据库表的每一列(也称为属性)都是不可分割的原子数据项,不能是集合,数组,记录等非原子数据项。即在实际应用中实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。

比如存在数据表(学号、学生姓名、家庭详细地址)。在该关系表中家庭地址就要按照实际情况进行处理。如果要求学生所在的省市区域,那家庭地址这个字段不符合第一范式,要进行细分,也即数据表(学号、学生姓名、省市区域、家庭详细地址)。如数据(ml,361909020429,宁夏,固原西吉.....)。因此是否满足第一范式要求要看该关系数据表是否满足实际的应用场景。

2、2NF

在1NF基础上,每一个的非码属性(不在主键中的列),都必须完全函数依赖于候选码。(在1NF基础上,消除 非码属性对码的部分函数依赖,也就是让非码属性 函数依赖于候选码中的全部属性)

比如关系表(学号,课程编号,课程名称,姓名, 年龄, 成绩, 学分)。实际上,在该关系表中姓名、年龄属性只依赖于学号,而与课程编号没有任何关系,所以这就是部分函数依赖,不是完全函数依赖。因此不满足第二范式的要求,将上述表进行拆分,消除函数依赖。

学生(学号,姓名, 年龄)

课程(课程编号,课程名称,学分)

成绩(学号,课程编号,成绩)

3、3NF

在2NF基础上,任何非主属性都直接依赖于主属性,不能传递依赖于主属性。即 表中的每一列 只与主键直接相关,而不是间接相关,(表中的每一列只能依赖于主键)。即每一个非码属性既不部分依赖于码,也不传递依赖于码。

比如关系表(学号,学生姓名,性别,学院编号,学院电话),很明显有关系 学号——>学院编号——>学院电话,这就是典型的传递函数依赖。因此对表进行拆分消除传递函数依赖如下。

学生(学号,学生姓名,性别,学院编号)

学院(学院编号,学院电话)

4、BCNF

在3NF基础上,消除主属性(候选码中的属性)对候选码的部分函数依赖和传递函数依赖。

若R∈BCNF,按定义排除了任何属性码的传递依赖与部分依赖,所以R∈3NF。

3NF:每一个非码属性既不部分依赖于码,也不传递依赖于码

BCNF:排除了任何属性对码的传递依赖与部分依赖(相对于3NF范围更广,从非码属性扩展到任何属性)

比如存在关系表(仓库编号,商品编号,管理员编号,数量),其中假设在该关系表中一个仓库只有一个一个管理员,所以管理员编号——>仓库编号,而仓库编号——>管理员编号,同时(仓库编号,商品编号)——>数量,(管理员编号,商品编号)——>数量,即再该关系中存在两个候选关键字(仓库编号,商品编号)和(管理员编号,商品编号),所以符合第三范式的定义,非码属性既不部分依赖于码,也不传递依赖于码。

可是存在的问题是,候选码(管理员编号,商品编号)中的主属性(管理员编号)部分依赖于不包含它的候选键(仓库编号,商品编号),所以不符合BCNF范式。因此对上面的关系进行拆分消除部分函数依赖关系如下。

(仓库编号,管理员编号)

(仓库编号,商品编号,数量)

5、4NF

多值依赖是属性之间的一对多关系,记为K→→A。

函数依赖事实上是单值依赖,所以不能表达属性值之间的一对多关系。

平凡的多值依赖:全集U=K+A,一个K可以对应于多个A,即K→→A。此时整个表就是一组一对多关系。

非平凡的多值依赖:全集U=K+A+B,一个K可以对应于多个A,也可以对应于多个B,A与B互相独立,即K→→A,K→→B。整个表有多组一对多关系,且有:“一”部分是相同的属性集合,“多”部分是互相独立的属性集合。

在BCNF的基础上,消除非平凡且非函数依赖的多值依赖。4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的多值依赖实际上是函数依赖。

比如下面的一张表,很明显存在多值依赖关系

课程→学生

课程→先修课

所以对上面的表进行拆分消除多值依赖如下

————————————————

点击进入连接:上述文章参考该博主的优秀博文
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q渡劫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值