数据库-范式解析

1.第一范式(1NF)

第一范式是指数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

 

下面看例子-学生信息表,

每一个属性都只有一个值,比如属性-电话,每个电话字段只有一个值,每一条记录里,每一个属性只有一个值而且不会有两个。

 

每一个字段也不能重复,下面是 符合的这一条规则的数据表,没有相同重复的字段(Field)

而下面的表显然就不符合第一范式,因为DBMS不允许将一个字段再分,数据表中的字段都是单一的,不可再分的。

如果需要重复的属性,那就可能需要定义一个新的实体,例如,学生信息表,一个人可能有一部家庭电话和一部移动电话,这时将其规范化为1NF可以将电话号码分为“家庭电话”和“移动电话”两个属性,即学生(学号,姓名,家庭电话,移动电话)。

 

简而言之,第一范式就是无重复的列

 

2.第二范式(2NF)

第二范式是在第一范式的基础上建立的,即满足第二范式首先要先满足第一范式。

在满足第一范式的前提下,

一是表必须有一个主键;

在学生信息表里,姓名可能会有重复相同的,所以为了能够明显地区别哪个学生是哪个学生,加上学号为主键,唯一标识该元组也就是标识该记录,

二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

例如,

在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),

但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,因此此种方式会导致数据冗余以及更新异常等问题。

解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外关键字课程号联系,在需要时进行连接。

所以,所有单关键字的数据表都属于第二范式,因为不存在组合关键字,也就不存在部分函数依赖。

 

3.第三范式(3NF)

第三范式是在第二范式的基础上建立的,即满足第三范式首先要先满足第二范式。

第三范式是在第二范式的前提下,消除非主属性的传递函数依赖

 

以学生表(学号,姓名,课程号,成绩)为例,其中学生姓名无重名,

所以该表有两个候选码(学号,课程号)和(姓名,课程号),

故存在函数依赖:

学号——>姓名

(学号,课程号)——>成绩

唯一的非主属性成绩对码不存在部分依赖,也不存在传递依赖,所以属性属于第三范式。

 

假设有一个关系,R(ABCDE), F={AB→CE,E→AB,C→D},候选码为AB,E.

AB→C,C→D    →   AB→D

存在非主属性D对候选键的传递函数依赖

E→AB,AB→C   →   E→C

存在非主属性C对候选键的传递函数依赖

 

4.BCNF范式(BCNF)

它构建在第三范式的基础上,如果关系模型R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R为BCNF的模式。

 

参考资料:

https://blog.youkuaiyun.com/qingking520/article/details/52937728

https://blog.youkuaiyun.com/dove_knowledge/article/details/71434960

https://blog.youkuaiyun.com/w__yi/article/details/19934319

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值