第二、三范式与BC范式的区别

在正式开始之前,先来明确以下几个概念:

1、码:能唯一确定一条记录的一个/多个属性。码包括主码和候选码。任意一个候选码也能作为主键。其中主码/候选码的任意一个真子集都不能确定一条记录。

2、主属性:构成主码候选码的属性都叫主属性!千万不要误认为候选码的属性不是主属性!

3、非主属性:除了主属性以外的属性都为非主属性。

4、传递依赖:如果存在A → B → C的决定关系,则C传递函数依赖于A。

 

第二范式:

第二范式的目的是去除非主属性的部分依赖,用大白话来说就是非主属性只能由来确定。比如说,在一个表中有A、B、C、D四列,(A,B)作为主码且没有其他候选码。如果存在A决定B的话(以后写为A → B),那么B这个非主属性就不是由(A,B)主码来确定的了。总的来说,第二范式的目的就是让表只描述一种信息(学生信息、考试科目信息等)。

 

第三范式:

第三范式的目的是去除非主属性的传递依赖。比如说,在一个表中有A、B、C三列,A作为主码且没有其他候选码,A →B,B →C,则C传递依赖于A,且A为码,则不满足第三范式。

总的来说第二、三范式规范的主要目标是非主属性。也就是说,第二、三范式消除的是非主属性对码的部分依赖和传递依赖。那么有没有消除主属性对码的传递和函数依赖的范式呢?那就是BC范式。

 

BC范式:

假设存在以下关系模式 (仓库名,管理员,物品名,数量)

已知函数依赖集:仓库名 → 管理员,管理员 → 仓库名,(仓库名,物品名)→ 数量

码:(管理员,物品名),(仓库名,物品名)

主属性:仓库名、管理员、物品名

非主属性:数量

在(管理员,物品名)这个码中,存在管理员→仓库名这个部分函数依赖。所以仓库名这个主属性((仓库名,物品名)的码的主属性)部分依赖于(管理员,物品名)这个码,因此不属于BC范式。



 

 

第三范式(Third Normal Form,3NF)和BC范式(Boyce-Codd Normal Form)都是关系数据库设计中的范式,用于规范化数据库模式。它们之间的主要区别在于对主键依赖的限制不同。 第三范式是在满足第二范式(2NF)的基础上,进一步消除非关键属性对主键的传递依赖。换句话说,3NF要求每个非主属性只依赖于候选键(即唯一标识一个元组的属性)或是其他非主属性,而不是依赖于候选键之外的其他属性。简单来说,3NF要求消除传递依赖,确保数据结构更加规范化。 而BC范式则更为严格,它是在满足3NF的基础上,进一步消除主属性对候选键的部分函数依赖。BC范式要求每个非主属性完全依赖于候选键,即不存在部分函数依赖。部分函数依赖是指一个候选键的某个子集决定了非主属性的一部分,而不是整个非主属性。BC范式的目标是消除冗余和数据更新异常。 举个例子来说明这两个范式的不同:假设有一个关系模式R(学号, 姓名, 课程, 学分),其中学号是候选键。如果存在以下依赖关系:(学号,课程)-> 学分,学号 -> 姓名,那么这个关系模式在3NF下是合法的,因为每个非主属性都依赖于候选键或其他非主属性。但是在BC范式下并不合法,因为存在(学号,课程)部分函数依赖于学分。 总结起来,第三范式主要消除传递依赖,而BC范式则进一步消除部分函数依赖,使得数据库模式更加规范化和无冗余。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值