首页 > 编程知识 正文

第三范式和第四范式区别,判断bcnf范式

时间:2023-05-04 01:18:42 阅读:15564 作者:1960

原文地址: https://blog.csdn.net/g _ beginner/article/details/6789308

1 .定义如果满足以下条件,则一个数据库架构中的表t和函数依赖集f称为符合Boyce-Codd规范化(BCNF ) : 可以从任何f导出的函数依赖X-A位于t,其中a是x中没有的单个属性,x必须是t的超级密钥。 如果数据库架构中的所有表都符合BCNF,则此数据库称为符合BCNF

表明BCNF是比第三范式更严格的范式。 关系模型中的所有属性(包括主属性和非主属性)都必须不传递依赖于任何候选项的关键字。 即,在关系表内功能上相互依赖的列的各列为关键字候补的情况下,应该满足BCNF。

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

3 .以这种物料管理表wpe(WNO、PNO、ENO、QNT )为例,WnO表示仓库编号,PNO表示部件编号,ENO表示员工编号,QNT表示数量。

有以下限制:

)一个仓库有多名员工

)2)一名员工只在一个仓库工作;

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

)4)相同型号的零部件可分为几个仓库。

分析表中函数的依赖关系可以获得以下结果:

)1)无-无;

(2) ) WNO,PNO )-QNT

(3) ) WNO,PNO )-ENO

(4) ) ENO,PNO )-QNT

如所见,候选键可以是(ENO,PNO ); (WNO,PNO )。 因此,ENO、PNO、WNO都是主属性,QNT是非主属性。 很明显,非主属性直接依赖于候选密钥。 因此,该表满足第三范式。

看看主要属性。 (WNO,PNO )-ENO; 无与伦比。 很明显,WNO对候选结合(WNO,PNO )存在传递依赖,因此不符合BCNF。

解决此问题的方法是将其分为两个表:管理表EP(Eno、PNO、QNT )。 工作表ew(Eno,WNO )。 但是,这样会丢失函数相关(WNO,PNO )-ENO。

4 .应用

但是,如果不满足BCNF,也可能引起冗馀和一致性问题。 但是,如果将表分解为满足BCNF的表,则可能会丢失一些函数依赖关系。 因此,一般不会强制关系表满足BCNF。

5. 第四范式(4NF)1 .定义

第四范式必须满足以下要求:

)1)必须满足第三范式

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

2 .说明

很明显,第四范式也是比第三范式更严格的范式。

第四范式的含义是,如果某个表的非主属性相互独立(3NF ),则这些非主属性不应该具有多值。 有多值就违反第四范式。 定义是抽象的,请参考以下示例进行理解。

3 .示例

有这样的用户联系表telephone (客户id、phone、CELL )。 客户ID是用户ID,PHONE是用户的固定电话,CELL是用户的手机。

本来,这是非常简单的第三范式表。 主键是CUSTOMERID,没有事务相关性。 但是在某些情况下,这样的表还是不合理的。 例如,用户有两个固定电话和两个手机。 此时,表的具体显示如下。

客户id

手机

单元格

1000

8828-1234

149088888888

1000

8838-1234

149099999999

因为PHONE和CELL是相互独立的,所以一些用户有两个或更多的值。 此时该表违反第四范式。

在这种情况下,该表的设计会带来很多维护上的故障。 例如,如果用户放弃了第一行固定电话和第二行移动电话,这两行是否会合并? 等一下

解决问题的方法是设计新的表new _ phone (客户id、编号、类型)。 这允许每个用户处理不同类型的多个电话号码,而不违反第四规范化。

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 需要消除主属性对键的部分和传递函数依赖。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。