第一范式、第二范式、第三范式、BCNF范式的区别

本文深入解析数据库规范化过程,从第一范式到BC范式,详细阐述了超键、候选键、主键、外键等概念,以及函数依赖关系,如完全函数依赖、部分函数依赖和传递函数依赖,并解释了如何通过消除部分和传递依赖达到更高层次的规范化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键码:

  1. 超键:在关系中能唯一标识元组的属性或属性集称为关键模式的超键。
  2. 候选键:不含有多余属性的超键称为候选键。也就是在候选键中在删除属性就不是键了。
  3. 主键:用户选作元组标识的候选键称为主键。一般不加说明,键就是指主键。
  4. 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键。

函数依赖关系:

存在关系:

R(学号,姓名,性别,班级,班主任,课号,课名,成绩)

主键:学号,课号

主属性:{学号,课号}

非主属性:{姓名,性别,班级,班主任,课名,成绩}

  1. 完全函数依赖,{学号,课号}-->成绩,{学号,课号}可以决定成绩,但只有学号或是只有课号无法决定成绩。
  2. 部分函数依赖,{学号,课号}-->姓名,只有学号就能决定姓名   (课号是冗余的)  。
  3. 传递函数依赖,{学号,课号}-->班主任,班主任依赖于班级,因班级依赖于学号,所以班主任间接依赖于学号。

第一范式(1NF)

数据库的每一列都是不可分割的基本数据项,强调列的原子性。即列不可以再拆分。反例:

ID姓名联系方式
  电话邮箱
1张三188XXXXXXXXXXX@163.COM

第二范式(2NF)

建立在第一范式的基础上,每一个非主属性要完全函数依赖于候选键(或者说是主键,任一个候选键都可以做主键)。即非主键列完全依赖于主键,而不能是依赖于主键的一部分,必须满足两个条件:

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

第三范式(3NF)

建立在第二范式的基础上,任何非主属性不依赖于其它非主属性。即每一个非主属性都不传递依赖于该范式的候选键。即非主键列只依赖于主键,不依赖于其他非主键。

BC范式(BCNF)

建立第三范式的基础上,任何非主属性不能对主键子集依赖。即数据库表中如果不存在任何字段对任一候选键的传递函数依赖则符合BC范式。

总结:

1NF消去对主键的部分函数依赖后=2NF。

2NF消去对主键的传递函数依赖后=3NF。

3NF消去对候选键的部分函数依赖和传递函数依赖后 = BCNF。

BCNF是对3NF的改进,即在3NF的基础的又把范围从主码扩大为候选码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值