`

BCNF范式(修正的第三范式)、第四范式和第五范式

阅读更多

修正的第三范式(BCNF

1.定义

当下面性质成立时,一个数据库模式中的表T及函数依赖集F被称为符合Boyce-Codd范式(BCNF):任何F可推导出的函数依赖X->A都在T中,这里A是不在X中的单一属性,X必须是T的一个超键。当一个数据库模式包含的所有表都符合BCNF时,这个数据库被称为符合BCNF.

2.说明

BCNF是比第三范式更严格一个范式。它要求关系模型中所有的属性(包括主属性和非主属性)都不传递依赖于任何候选关键字。也就是说,当关系型表中功能上互相依赖的那些列的每一列都是一个候选关键字时候,该满足BCNF

BCNF实际上是在第三范式的基础上,进一步消除了主属性的传递依赖。

3.举例

有这样一个配件管理表WPE(WNO,PNO,ENO,QNT),其中WNO表示仓库号,PNO表示配件号,ENO表示职工号,QNT表示数量。

有以下约束要求:

(1)一个仓库有多名职工;

(2)一个职工仅在一个仓库工作;

(3)每个仓库里一种型号的配件由专人负责,但一个人可以管理几种配件;

(4)同一种型号的配件可以分放在几个仓库中。

分析表中的函数依赖关系,可以得到:

(1)ENO->WNO;

(2)WNOPNO->QNT

(3)WNOPNO->ENO

(4)ENOPNO->QNT

可以看到,候选键有:(ENO,PNO;(WNO,PNO)。所以,ENO,PNO,WNO均为主属性,QNT为非主属性。显然,非主属性是直接依赖于候选键的。所以此表满足第三范式。

而我们观察一下主属性:(WNO,PNO->ENO;ENO->WNO。显然WNO对于候选键(WNO,PNO)存在传递依赖,所以不符合BCNF.

解决这个问题的办法是分拆为两个表:管理表EPENOPNOQNT);工作表EWENOWNO)。但这样做会导致函数依赖(WNO,PNO->ENO丢失。

4.应用

虽然,不满足BCNF,也会导致一些冗余和一致性的问题。但是,将表分解成满足BCNF的表又可能丢失一些函数依赖。所以,一般情况下不会强制要求关系表要满足BCNF

五.第四范式(4NF

1.定义

第四范式需要满足以下要求:

(1)必须满足第三范式

(2)表中不能包含一个实体的两个或多个互相独立的多值因子。

2.说明

显然,第四范式也是一个比第三范式严格的范式。

第四范式的意思是:当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值。若有多值就违反了第四范式。定义比较抽象,可以参照下面的例子理解。

3.举例

有这样一个用户联系方式表TELEPHONE(CUSTOMERID,PHONE,CELL)CUSTOMERID为用户ID,PHONE为用户的固定电话,CELL为用户的移动电话。

本来,这是一个非常简单的第3范式表。主键为CUSTOMERID,不存在传递依赖。但在某些情况下,这样的表还是不合理的。比如说,用户有两个固定电话,两个移动电话。这时,表的具体表示如下:

CUSTOMERID

PHONE

CELL

1000

8828-1234

149088888888

1000

8838-1234

149099999999

由于PHONECELL是互相独立的,而有些用户又有两个和多个值。这时此表就违反第四范式。

在这种情况下,此表的设计就会带来很多维护上的麻烦。例如,如果用户放弃第一行的固定电话和第二行的移动电话,那么这两行会合并吗?等等

解决问题的方法为,设计一个新表NEW_PHONE(CUSTOMERID,NUMBER,TYPE).这样就可以对每个用户处理不同类型的多个电话号码,而不会违反第四范式。

4.应用

显然,第四范式的应用范围比较小,因为只有在某些特殊情况下,要考虑将表规范到第四范式。所以在实际应用中,一般不要求表满足第四范式。

六.第五范式(5NF

1.定义

第五范式有以下要求:

(1)必须满足第四范式

(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。

2.说明

第五范式是在第四范式的基础上做的进一步规范化。

第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

3.举例

有一个销售信息表SALESSALEPERSONVENDORPRODUCT)。SALEPERSON代表销售人员,VENDOR代表供和商,PRODUCT则代表产品。

在某些情况下,这个表中会产生一些冗余。可以将表分解为PERSON_VENDOR表(SALEPERSONVENDOR);PERSON_PRODUCT表(SALEPERSONPRODUCT);VENDOR­_PRODICT表(VENDORPRODUCT)。

4.应用

第五范式的应用就更少了,很多时候,我认为分解为第五范式是完全没必要的。可能在某些情况下会有意义吧。不懂。。。

总结:

总之,规范化的过程就是在数据库表设计时移除数据冗余的过程。随着规范化的进行,数据冗余越来越少,但数据库的效率也越来越低。

这就要求你在数据库设计中,能结合实际应用的性能要求,规范到合适的范式。一般情况下,如何性能允许的话,都要求规范到第三范式的。

===================================================

例子:STC(Sid,Tid,Cid) 学生选课m:n,老师授课m:1,
有以下函数依赖:(Sid,Cid)->Tid;(Sid,Tid)->Cid;Tid->Cid

这个表不符合BCNF但符合第三范式。
改为:ST(Sid,Tid);TC(Tid,Cid)。现在就符合BCNF了。

3NF->BCNF 需要消除主属性对键的部分和传递函数依赖。

分享到:
评论

相关推荐

    数据库范式(123BCNF范式)详解.docx

    第五范式(5NF)是在第四范式(4NF)的基础上建立起来的,即满足第五范式(5NF)必须先满足第四范式(4NF)。第五范式(5NF)要求一个数据库表中不包含连接依赖。 数据库设计中,数据库范式是指数据库设计所需要...

    软考系分之数据库第一二三范式及BCNF范式

    本文将详细介绍第一、第二、第三范式以及BCNF范式,并结合具体示例来帮助理解这些概念。 ### 一、第一范式(1NF) #### 定义: 第一范式要求关系模式中的每一个列都具有原子性,即列的值不能再被细分。简单来说,...

    数据库考试题 模式分解例题 范式规范化 3NF BCNF

    3NF 和 BCNF 是数据库设计中的两个重要概念,分别表示第三范式和 Boyce-Codd 范式,它们都是数据库设计中的重要原则和方法。 本文将对数据库考试题中的每个问题进行详细的解释和分析,帮助读者更好地理解数据库的...

    精讲数据库范式1NF,2NF,3NF,BCNF

    精讲数据库范式1NF,2NF,3NF,BCNF

    数据库三大范式详解

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...

    数据库范式(1NF_2NF_3NF_BCNF)详解

    3. **意义**:满足第三范式有助于避免数据冗余和更新异常,提高数据一致性和准确性。 #### 四、BCNF(Boyce-Codd范式) BCNF是比第三范式更严格的范式,旨在消除非主键字段对主键的部分依赖和传递依赖。在BCNF中,...

    数据库三范式

    例如,如果存在一个学生表、课程表和选课表,其中选课表包含学生ID、课程ID和成绩,而学生表和课程表分别存储学生的个人信息和课程信息,则该设计符合第三范式。因为成绩直接依赖于学生ID和课程ID,而不依赖于学生表...

    数据库设计三范式

    尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手

    通俗易懂,实例讲解数据库范式,三范式,六范式

    ##### 第三范式(3NF): 消除非主属性的传递依赖 - **前提条件**:符合2NF。 - **定义**:在符合2NF的基础上,要求非主属性既不部分依赖于码,也不传递依赖于码。 - **示例**:如果一个课程的教材由教师决定,而教师...

    Java面试中数据库三范式详解

    例如,在一个学生关系表中,如果存在“学院”决定“学院地点”和“学院电话”,那么这个数据库表就不满足第三范式。因为存在传递函数依赖关系,即“学院”决定“学院地点”和“学院电话”。 四、BCNF BCNF 的定义...

    关系数据库范式归属的证明

    根据描述中的内容,本文档详细介绍了如何通过函数依赖的角度来证明BCNF(Boyce-Codd范式)归属于3NF(第三范式),以及3NF归属于2NF(第二范式)。 ### 关系数据库与范式 数据库系统的数据模型主要分为三种:网状...

    sql三个范式举例.doc

    SQL三个范式是数据库设计中重要的理论基础,它们分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。这些范式确保了数据库的规范化,避免数据冗余和操作异常,从而提高数据的完整性和一致性。 1. **第一...

    范式的判断

    范式共有五种,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF(Boyce-Codd范式)以及第四范式(4NF)和第五范式(5NF)。本文将详细介绍前四种范式,并通过具体实例来帮助读者更好地理解和应用这些...

    ORACLE范式的学习

    在实际的数据库设计中,通常会追求更高的范式,如BCNF(博科斯范式)和4NF(第四范式),以进一步优化数据结构和减少冗余。然而,过分追求范式可能导致查询效率下降,需要在规范化和性能之间找到平衡。在设计数据库...

    三大范式应用与理解

    主要的范式有三个,即第一范式(1NF)、第二范式(2NF)和第三范式(3NF),还有更高层次的鲍依斯-科得范式(BCNF)。这些范式的目标是减少数据冗余,避免数据更新时出现异常,如插入异常、删除异常和更新异常。 第...

    数据库范式详解+实例

    数据库范式主要包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd范式)。下面我们详细介绍这些范式及其相互之间的转换方法。 ##### 第一范式(1NF) - **定义**:如果关系模式R属于第...

    关系型数据库1NF~6NF,BCNF详解

    BCNF是修正的第三范式,它比3NF又进一步。BCNF要求除对一个候选键扩展集(称作一个超级键)存在属性函数依赖外,不存在其它非平凡函数依赖。 第四范式(4NF) 第四范式是在BCNF的基础上,要求除对一个候选键扩展集...

    数据库设计三大范式应用实例剖析

    数据库设计的三大范式是确保数据一致性、减少冗余、避免异常的重要理论基础,它们分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。理解并正确应用这些范式,可以构建出高效、稳定、易于维护的数据库。 *...

    利用范式优化关系数据库中的数据结构.pdf

    规范化的过程基于一系列称为“范式”的规则,这些规则由低到高分为不同等级,包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF范式、第四范式(4NF)和第五范式(5NF)。 第一范式要求表中的所有字段...

Global site tag (gtag.js) - Google Analytics