修正的第三范式(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)(WNO,PNO)->QNT
(3)(WNO,PNO)->ENO
(4)(ENO,PNO)->QNT
可以看到,候选键有:(ENO,PNO);(WNO,PNO)。所以,ENO,PNO,WNO均为主属性,QNT为非主属性。显然,非主属性是直接依赖于候选键的。所以此表满足第三范式。
而我们观察一下主属性:(WNO,PNO)->ENO;ENO->WNO。显然WNO对于候选键(WNO,PNO)存在传递依赖,所以不符合BCNF.
解决这个问题的办法是分拆为两个表:管理表EP(ENO,PNO,QNT);工作表EW(ENO,WNO)。但这样做会导致函数依赖(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
|
由于PHONE和CELL是互相独立的,而有些用户又有两个和多个值。这时此表就违反第四范式。
在这种情况下,此表的设计就会带来很多维护上的麻烦。例如,如果用户放弃第一行的固定电话和第二行的移动电话,那么这两行会合并吗?等等
解决问题的方法为,设计一个新表NEW_PHONE(CUSTOMERID,NUMBER,TYPE).这样就可以对每个用户处理不同类型的多个电话号码,而不会违反第四范式。
4.应用
显然,第四范式的应用范围比较小,因为只有在某些特殊情况下,要考虑将表规范到第四范式。所以在实际应用中,一般不要求表满足第四范式。
六.第五范式(5NF)
1.定义
第五范式有以下要求:
(1)必须满足第四范式
(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
2.说明
第五范式是在第四范式的基础上做的进一步规范化。
第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。
3.举例
有一个销售信息表SALES(SALEPERSON,VENDOR,PRODUCT)。SALEPERSON代表销售人员,VENDOR代表供和商,PRODUCT则代表产品。
在某些情况下,这个表中会产生一些冗余。可以将表分解为PERSON_VENDOR表(SALEPERSON,VENDOR);PERSON_PRODUCT表(SALEPERSON,PRODUCT);VENDOR_PRODICT表(VENDOR,PRODUCT)。
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
内容概要:数据库第一二三范式及BCNF范式等;使用场景:本资源主要用于辅助系统分析师的软考;适用人群:系分备考者、产品经历、软件开发等,也适用于有相关知识点学习兴趣的小伙伴;其他:思维导图的方式介绍知识点...
精讲数据库范式1NF,2NF,3NF,BCNF
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...
关于数据库的考题 练习题 很有帮助 范式分解的例题 E-R图
4NF详析引言范式种类第一范式(1NF)符合1NF的关系中的每个属性都不可再分存在问题第二范式(2NF)在1NF基础上消除了非主属性对码的部分函数依赖二范式判断步骤优缺点第三范式(3NF)在2NF基础上消除非主属性对码的...
尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手
规范化的范式可分为第一范式、第二范式、第三范式、BCNF范式、第四范式和第五范式。一般来说,逻辑数据库设计会满足规范化的前3级标准,但由于满足第三范式的表结构容易维护且基本满足实际应用的要求。因此,实际应用...
尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。
尽管第⼆,第三和Boyce-Codd范式具有功能依赖性,但4NF却具有更为通⽤的依赖性类型,即多值依赖性。 A table or relation is in 4NF if and only if, for each attribute of its non-trivial multivalued ...
BCNF Boyce–Codd 范式是用于数据库规范化的范式
第一范式-表要有主键、列不可分 第二范式-(多对多关系 以学号和教师编号为主键的表)当一张表中有多个字段作为主键时,非主键的字段不能只依赖部分主键(学生姓名...第三范式-不能存在传递依赖(有不依赖主键的栏位)
文章中的一些概念候选码主属性函数依赖完全函数依赖部分函数依赖传递函数依赖什么是范式范式的分类第一范式(1NF)第二范式(2NF)第三范式(3NF)巴斯-科德范式(BCNF)第四范式(4NF)第五范式(5NF) 文章中的...
数据库设计范式学习笔记,1NF/2NF/3NF/BCNF/4NF
通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。 第一范式(1NF) 第一范式其实是关系型数据库的基础,即任何关系型数据库都是符合第一范式的。简单的将第一范式就是每一行...
尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范 式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。 第一...
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员...
文章目录数据库范式:容易忽略的关键知识第一范式(1NF)第二范式(2NF)第三范式(3NF)鲍依斯-科得范式(BCNF)参考文章 数据库范式:容易忽略的关键知识 大多数面试的时候,问数据库知识,问得最多得就是索引、事务。...
第四范式(4NF) 第五范式(5NF) 1NF 若关系模式R的所有属性都是不可分的基本数据项,则R属于1NF(表不可分) 2NF 若R属于1NF,且不存在非主属性对码的部分函数依赖,则R属于2NF(码由几个属性组成,非主属性有对码中部分...
详细解析了 1NF 2NF 3NF BCNF的概念,理解并通过例题应用