精华内容
下载资源
问答
  • bcnf范式分解
    千次阅读 多人点赞
    2020-03-22 10:20:07

    // 数据库老师始终不见,埋头看书苦不堪言。遇到范式更是难解,真就自己阅读自学。好诗好诗

    范式简介

    数据库范式是一种规范。类似同心圆,最外面一层要求最低,最里面要求最高。
    规范的要求从低到高分别为:1NF 2NF 3NF BCNF 4NF 5NF
    在日常使用中数据库能达到3NF的要求就已经很严苛,根据BCNF划分新的表一般也不会超过一次。但谁叫我们要做题呢~~

    范式对应要求

    级别高的范式包含比它级别低的范式的要求

    1NF

    1NF:关系中的每个属性都不可再分

    • 这是表结构的基本要求,能写在数据库中的表都满足

    2NF

    2NF:消除非主属性对候选键的部分函数依赖(码 -P> 非主)

    • P应该标识在箭头上方
    • Y 函数依赖于X,但同时Y并不完全函数依赖于X,就称 Y 部分函数依赖于X。例:(学号,课名) -P> 姓名
    • 码又叫候选键。候选键是指能唯一标识元组的一个或多个属性的集合
    • 所有候选键的并集就叫主属性
    • R中除去主属性以外的属性就叫非主属性

    3NF

    3NF:消除非主属性对候选键的传递函数依赖(码 -T> 非主)

    • Z函数依赖于Y,且Y函数依赖于X,称Z传递函数依赖于X。例:A->D D->C

    BCNF

    BCNF:消除主属性对候选键的部分、传递函数依赖( 码 -PT>主 )

    BCNF解题思路

    BCNF解题步骤
    1、求出R中所有FD左侧的闭包,取一个闭包{X}+,若能包含R中的所有元素,则该FD满足BCNF
    2、如果不能包含R中所有元素,则将R分解成两个关系R1、R2,{X}+作为R1的元素,X与R中剩余元素作为R2的元素
    3、对R1、R2递归处理上述步骤
    

    在这里解释一下为什么要引入闭包
    {X}+定义就是由X直接或间接推导出的所有元素的集合。而这恰是部分函数依赖和传递依赖的性质。所以说闭包是他俩的具体应用!

    BCNF例题

    已知R(A,B,C,D,E) 含有FD:AB->C C->D D->B D->E,求根据BCNF分解的新集合。

    1. 先把R中所有FD的左侧对应的闭包写出来
      {A,B}+={A,B,C,D,E}
      {C}+={B,C,D,E}

      其实不用列完,发现第二个就已经不满足,那就根据第二个进行分解
    2. 根据{C}+分解R
      R1={B,C,D,E} R2={A,C}
      R2已经只有两个元素了,必定满足BCNF规范,所以不用考虑,接下来继续考虑R1是否满足BCNF
    3. 将R1中所有FD的左侧对应的闭包写出来
      {D}+={B,D,E}

      出现了不满足的闭包,则继续分解R1
    4. 根据{D}+分解R1
      R3={B,D,E} R4={C,D}
      R4不需再分,接下来考虑R3是否满足BCNF
    5. 将R3中所有FD的左侧对应的闭包写出来
      {D}+={B,D,E}
      R3中所有闭包满足条件,递归分解结束

    后话

    由于我才做到BCNF的题目,这里就暂时只有这个。以后会陆续更新。
    这次的博客我参考了许多资料,最后其实感觉也挺简单。
    喜欢的话记得关注。

    更多相关内容
  • BCNF范式的判断和分解

    千次阅读 多人点赞 2021-05-13 15:19:23
    首先,怎么判断一个关系是不是BCNF范式? 简单来说,对于一个关系R,每个函数依赖X→Y的左侧都包含关系R的码,也就是说每个函数依赖的左侧都是关系R的一个超码,那么这个关系R是BCNF范式的。 另一种判断方式是,对...

    首先,怎么判断一个关系是不是BCNF范式?

    简单来说,对于一个关系R,每个函数依赖X→Y的左侧都包含关系R的码,也就是说每个函数依赖的左侧都是关系R的一个超码,那么这个关系R是BCNF范式的。

    另一种判断方式是,对每个函数依赖X→Y的左侧求闭包,如果对于每一个函数依赖,左侧的闭包包含关系R中的所有属性,那么这个关系R是BCNF范式的。

    反之,用以上方法判断时,如果出现函数依赖不满足以上条件,那么就存在违背BCNF范式的情况, 这个关系R就不是BCNF范式的。

     

    现在,我们有一个关系R和它一个函数依赖集合S,那么我们怎么把R分解成BCNF范式的关系呢?

    1.  首先根据以上办法判断R是不是BCNF范式,如果是的话,那么以下步骤不需要。

    2. 如果存在违背BCNF的函数依赖,任取其中一个,假设我们取X→Y, 计算X的闭包X+(本文中的+都应该是上角标),则R1=X+, R2=X∪(R-X+)。

    3. 分别计算R1和R2的函数依赖集合S1和S2。

    4. 判断R1和R2 是不是BCNF范式,如果不是,根据其对应的函数依赖集合,重复2,3,4步骤,继续进行分解,直到分解后的关系遵循BCNF范式。

     

    下面,我们以一个例子来说明以上这个BCNF分解算法怎么使用?

    假设我们有一个关系表R={A,B,C,D,E,F,G},它的函数依赖集合为S={A→B, C→E,CD→F, F→G}。

    {A,C,D} 是这个表的码。

    A 姓名B 系C 课程D 年份E 学分F 教师G 办公室
    小明计算机系数据库20215张三B123
    小明计算机系C语言20205张三B123
    小红电子系网络基础20205李四A123
    小花软件系数据库20205王五A112
    小花软件系网络基础20215李四A123
    小白电子系高等数学20202赵六C123
    小胖计算机系C语言20195周七B112
    小强软件系高等数学20202赵六C123
    小林计算机系英语20205田八D123

    按照以上步骤对R进行分解:

    1. 首先对每一个函数依赖的左侧求闭包,找出违反BCNF的依赖。 

    S={A→B, C→E,CD→F, F→G}

    A→B: {A}+={A,B}

    C→E:{C}+={C,E}

    CD→F:{CD}+={C,D,E,F,G}

    F→G:{F}+={F,G}

    可以看出,这四个依赖都违反了BCNF,任取其中一个进行下面的步骤,这里以CD→F为例。

    2. R1={CD}+={C,D,E,F,G},R2={C,D}∪{R-{CD}+}={A,B,C,D} .

    3.找出R1 和R2的 函数依赖集合S1和S2, 这是由原关系R的函数依赖集合S得到的。

    对于R1={C,D,E,F,G}, S1={C→E, CD→F, F→G}

    对于R2={A,B,C,D}, S2={A→B}

    4. 对S1和S2,重复步骤1,判断R1和R2是不是遵循BCNF范式。

    这里,R2违反了BCNF范式。所以我们取它的A→B,进一步求出它分解得到的两个关系。

    R3={A}+={A,B}, R4={A}∪{R-{A}+}={A,C,D}

    5. 判断R3和R4是不是符合BCNF, 对于R4,不存在任何的函数依赖,这也可以说明R4是BCNF范式的。

    所以R={A,B,C,D,E,F,G},我们分解成了R1={C,D,E,F,G},R3={A,B}, R4={A,C,D}。

    到此所有分解后的关系都遵循BCNF,可以结束分解,否则需要继续重复以上步骤。

     

    另外,如果不做以上过程,想要直接得出分解后的结果,有一个非常容易的小技巧。

    如果R不遵循BCNF范式,只需任取一个违反BCNF的函数依赖,分解后的关系R1包含这个函数依赖的所有属性(箭头左右都包括),R2包括R中除掉这个函数依赖右侧属性的其他所有属性。再继续对R1和R2分解直至所有的表都是BCNF的。这个过程和上一个方法可能不一样,但是最终结果的所有表都是一样的。

    希望能够将步骤写的尽可能详细,可能有些啰嗦,如果能够理解分解过程,就会容易很多。 

    如有错误,欢迎指正。

     

     

    展开全文
  • BCNF无损分解例题

    千次阅读 2022-01-06 11:24:08
    模式分解BCNF无损连接
    例2. 关系模式R<U,F>,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接;
    • 第一步:求取码

    首先查找L属性,即只在依赖函数左端出现过的属性,结果为B,E。

    然后计算B在F上的闭包为BCD,E在F上的闭包为E,显然都不等于U,但是BE的闭包等于U

    因此BE为R的唯一候选码

    候选码求法

    • 第二部:逐步分解
    • 第一次分解

      A->C违背BCNF的定义,单独拿出构成关系模式R11(A,C),F11(A->C),key11=A。

      同样,函数依赖右端中不必再出现C,可以通过传递依赖尽可能消除C,那么得到

      B->D,DE->D,BE->A,A->D,AE->A,把能换的全换了保险。然后就将R分解成了

      R12(A,B,D,E),F12(B->D,DE->D,BE->A,A->D,AE->A),key12=BE

      然后计算F11与F12求最小依赖集

      F11不变,本身就是,F12经过单属性化,无冗余化,既约化后变为

      R12(A,B,D,E),F12(B->D,BE->A,A->D),key12=BE

      最小依赖集求法

      综上R分解成为:R11(AC),F11(A->C),key11=A,R12(A,B,D,E),F12(B->D,BE->A,A->D),key12=BE

    • 第二次分解

      鉴于R11已经为BCNF,故可以不再分解。但R12显然不是,需要继续分解。

      显然R12中的A->D不满足BCNF定义,单独拿出,R21(A,D),F21(A->D),key=A,

      函数依赖右端中不必再出现D,可以通过传递依赖尽可能消除D,那么得到

      R22(A,B,D,E),F12(B->D,BE->A),key22=BE

      此时F21与F22均是最小依赖集不需要变

      综上R12分解成为:R21(A,D),F21(A->D),key=A,R22(A,B,D,E),F12(B->D,BE->A),key22=BE

    • 第三次分解

      鉴于R21已经为BCNF,故可以不再分解。但R22显然不是,需要继续分解。

      显然B->D不满足BCNF定义直接拿出

      R31(B,D),F31(B->D),key=B,那么剩余的BE->A也可以构成BCNF

      R32(ABE),F32(BE->A),key=BE

      显然R31与R32都满足BCNF,分解完毕

      综上R22分解成为:R31(B,D),F31(B->D),key=B,R32(ABE),F32(BE->A),key=BE

    • 综上所述R分解为下表

      R11(AC),F11(A->C),key11=A
      R21(A,D),F21(A->D),key=A
      R31(B,D),F31(B->D),key=B
      R32(ABE),F32(BE->A),key=BE
    • 第三步:验证上述BCNF分解就是无损连接
    • 做表

      ABCDE
      ACa1b12a3b14b15
      ADa1b22b23a4b25
      BDb31a2b33a4b35
      ABEa1a2b43b44a5
    • 观察函数依赖F

    • A->C,改表
    ABCDE
    ACa1a2a3b14b15
    ADa1a2b23a4b25
    BDb31a2b33a4b35
    ABEa1a2b43b44a5
    • B->C,改表
    ABCDE
    ACa1a2a3b14b15
    ADa1a2a3a4b25
    BDb31a2a3a4b35
    ABEa1a2a3b44a5
    • C->D,改表
    ABCDE
    ACa1a2a3a4b15
    ADa1a2a3a4b25
    BDb31a2a3a4b35
    ABEa1a2a3a4a5

    此时,第五行全部为a,是无损连接,证明完毕

    展开全文
  • 在模式分解之前,首先对于1NF,2NF,3NF,BCNF做一个简明扼要的介绍。 1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。 2NF要求属性...

    本来是为了复习数据库期末考试,结果找了一圈都没有发现比较好的解释,通过查阅资料和总结,为大家提供通俗易懂的解法,一听就会!并且配有速记口诀!介是你没有玩过的船新版本包含最小依赖集求法候选码求法

    在模式分解之前,首先对于1NF,2NF,3NF,BCNF做一个简明扼要的介绍。

    1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。

    2NF要求属性完全依赖于主键,不能存在仅依赖主关键字一部分的属性。

    3NF要求每一个非主属性既不部分依赖于码也不传递依赖于码。

    BCNF消除了主属性对候选码的部分和传递函数依赖。

    注:1.相对于BCNF,3NF允许存在主属性对候选码的传递依赖和部分依赖。

    2.BCNF比较抽象,略作解释:在学生信息表里,学号是一个候选码,学号可确定学生姓名;(班级,学生姓名)也是一组候选码,有(班级,学生姓名)->学号,因此在主属性间形成了传递依赖。

    3.若对概念不清晰,关于码、候选码、主属性、非主属性的解释可参看:

    https://blog.csdn.net/sumaliqinghua/article/details/85872446#commentBox

    我们的重点是讲解范式分解:

    一、3NF分解

    分为保持依赖和无损连接

    为了说明求解保持依赖,我们先要会求最小依赖集

    (1)最小依赖集求法:

    口诀:右侧先拆单,依赖依次删。

               还原即可删,再拆左非单。

    通过求下面的最小依赖集对口诀进行解释,

    (2)3NF分解:

    口诀:

    保函依赖分解题,先求最小依赖集。

    依赖两侧未出现,分成子集放一边,剩余依赖变子集。

    若要连接成无损,再添候选做子集。

    下面通过几道例题讲解口诀:

    例1.已知R(ABCDE), F={A ->D,E->D,D->B,BC->D,DC->A}求保持函数依赖的3NF分解,和具有无损连接性及保持函数依赖的3NF分解

    第一步:保函依赖分解题,先求最小依赖集。先求出R的最小依赖集,可得F={A ->D,E->D,D->B,BC->D,DC->A}

    第二步:依赖两侧未出现,分成子集放一边。首先可以发现没有不出现在两侧的元素不用单独分出一个子集,“剩余依赖变子集”然后我们将各依赖分别划分为子集得到:{AD} {ED} {DB} {BCD} {DCA},即为所求保持函数依赖的3NF分解

    第三步:若要连接成无损,再添候选做子集。

    (1)候选码的求解:所谓候选码即能决定整个关系的,我们通过找未出现在依赖右边的和两侧均未出现的元素即可求得,

    (2)可以发现C E未出现在右边,因此候选码为{CE}。故所求具有无损连接性及保持函数依赖的3NF分解为{AD} {ED} {DB} {BCD} {DCA} {CE}

     

    例2.关系模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},将关系模式分解为3NF且保持函数依赖

    将关系模式分解为3NF且保持函数依赖:

    第一步:保函依赖分解题,先求最小依赖集。先求出R的最小依赖集,

    假设B->G冗余,则(B)+=BD,没有G故不冗余。

    假设CE->B冗余,则(CE)+=CEGDA,没有B故不冗余。

    假设C->A冗余,则(C)+=CD,故不冗余。

    一次可以得到最小函数依赖集Fm={B->G,CE->B,C->A,B->D,C->D}

    第二步:依赖两侧未出现,分成子集放一边,剩余依赖变子集。首先可以发现没有不出现在两侧的元素,然后我们将各依赖分别划分为子集得{BG} {CEB} {CA} {BD} {CD},即为所求保持函数依赖的3NF分解

    第三步:若要连接成无损,再添候选做子集。找到R的一个候选码为{CE}。故所求具有无损连接性及保持函数依赖的3NF分解为{BG} {CEB} {CA} {BD} {CD} {CE} (注:范式分解并不唯一,正确即可)

     

    二、BCNF分解:

    将关系模式R<U,F>分解为一个BCNF的基本步骤是

    1)先求最小依赖集,候码非码成子集

    3)余下左侧全候码,完成BCNF题。

    例.关系模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},将关系模式分解为3NF且保持函数依赖

    将关系模式分解为3NF且保持函数依赖:

    第一步:先求最小依赖集。可以发现CE->G多余,因此最小依赖集为F={B->G,CE->B,C->A,B->D,C->D}。

    第二步:候码非码成子集。由于候选码为(CE)因此将CE->B划分出子集(BCE),而B->G,B->D左侧均不含主属性(C、E)中的任何一个故划分出(BG),(BD)

    第三步:此时剩余依赖F={C->A,C->D}剩余元素{A,C,D}检查发现函数依赖左侧都是候选码即完成BCNF分解,如果不满足则继续分解余下的。

    于是BCNF分解的最后结果为{(BG),(BD),(ACD),(BCE)}。

    如有疑问请在评论区留言,如有帮助麻烦右上角点个赞~~蟹蟹

    三、总结

    1.闭包

    2.候选码

    3.最小依赖集

    4.3NF分解

    5.BCNF分解

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

    万次阅读 多人点赞 2020-05-13 12:33:49
    若X→Y且Y不包含X时X必含有码,则R〈U,F〉∈BCNF。 也就是说,关系模式R〈U,F〉中,若每一个决定因素都包含码,则R〈U,F〉∈BCNF。 由关系模式的定义可以得到如下结论,若R属于BCNF,则R有: 1.所有非主属性对每一个码...
  • 前言在理解模式分解的时候,发现模式分解算法比较难懂。于是想出了一个通俗易懂的解法,并且配有速记口诀!...范式介绍这里也对1NF,2NF,3NF,BCNF做一个简明扼要的介绍。1NF是指数据库表的每一列都是不可分...
  • BCNF的保持无损连接的分解

    千次阅读 2021-03-07 16:15:17
    BCNF分解是数据库范式的内容分解的算法是这样的将关系模式R分解为一个BCNF的基本步骤是1).检查R中关系模式是否符合BCNF,若都符合输出即可2)若R中有关系模式S不符合BCNF,则必有X->A的闭包不包含S的全部属性,...
  • 详解数据库三大范式、BCNF范式

    千次阅读 2020-11-21 16:34:05
    什么是”范式(NF)”1. 第一范式(1NF)2. 第二范式(2NF)2.1 函数依赖2.1.1完全函数依赖2.1.2 部分函数依赖 2.2 码2.3 非主属性 3. 第三范式(3NF)4. 小结 4.1 三大范式总结 4.2 完全&部分函数依赖 4.3 ...
  • 范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且...
  • 如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计...
  • 首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各...数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多...
  • 详解第一范式、第二范式、第三范式、BCNF范式

    万次阅读 多人点赞 2019-03-02 16:08:45
    文章目录第一范式定义以及分析:问题研究:第二范式必备知识点函数依赖:码:非主属性 :定义分析:解决办法:问题研究:第三范式:定义:分析:问题研究:BCNF范式分析问题研究小结: 第一范式 定义以及分析: 首先是...
  • bcnf范式

    2021-01-20 03:15:53
    3.5范式——bcnf范式到底是什么呢? 对于bcnf范式,通过查阅资料,我的理解是——主键依赖的去除。比如说:一个仓库管理的表,有以下属性(管理员编号,仓库号,货物编号,货物数量)其中每个管理员管理一个仓库,那么...
  • 关系数据库的三大范式以及BCNF范式

    万次阅读 多人点赞 2018-04-02 22:19:46
    按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里...
  • 文章系转载,通俗易懂,写了很久代码,数据库知识一直薄弱,学习中;...什么是”范式(NF)” 1. 第一范式(1NF) 2. 第二范式(2NF) 2.1 函数依赖 2.1.1完全函数依赖 2.1.2 部分函数依赖 2....
  • BCNF和第三范式分解算法

    千次阅读 多人点赞 2019-12-20 19:18:25
    范式概念 ...BCNF:对于关系模式R的函数依赖集,每个依赖都必须符合下面两个至少有一项成立: 1,a——>b是平凡的函数依赖,即b属于a。 2,a——>b,其中a是关系模式R的一个超码。 这里我们对B...
  • 展开全部BCNF范式在3NF基础上消除对主码子集的62616964757a686964616fe78988e69d8331333431373230依赖。以仓库管理关系表为例:仓库号,存储物品号,管理员号,数量。首先该表满足第三范式,也就是说一个管理员只在...
  • 第一范式、第二范式、第三范式、BCNF范式详解

    万次阅读 多人点赞 2020-10-10 15:26:19
    范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。
  • BCNF题解

    千次阅读 2020-12-24 20:34:54
    设有关系模式R(A,B,C,D,E,G)上的函数依赖集为:F={A→B,B→C,AD→G,D→E}。...34.将关系模式R无损地分解BCNF,要求写出分解过程。35.说明分解ρ={R1,R2},R1(ABC)、R2(ADEG)的范式级别并说明理由...
  • sec_id, semester, year, building, room_number, capacity, time_slot_id)分解BCNF范式,函数依赖关系如下: course_id → title, dept_name, credits building, room_number → capacity course_id, sec_id, ...
  • BCNF范式、第四范式和第五范式

    千次阅读 2018-10-14 21:41:04
    当下面性质成立时,一个数据库模式中的表T及函数依赖集F被称为符合Boyce-Codd范式BCNF):任何F可推导出的函数依赖X-&gt;A都在T中,这里A是不在X中的单一属性,X必须是T的一个超键。当一个数据库模式包含的...
  • BCNF范式 分析 问题研究 小结: 参考文献 第一范式 定义以及分析: 首先是第一范式(1NF)。符合1NF的关系(你可以理解为数据表。“关系模式”和“关系”的区别,类似于面向对象程序设计中”类“与”对象“的...
  • BCNF分解算法

    千次阅读 2018-05-28 19:53:35
    存在一个关系模式R,并且此关系模式中存在α→βα→βα \to β 违反了BC范式分解条件 设 将此关系模式R 分解为 {R_i} ,其中 i 为1,2,3,4…..n BC分解算法如下所述: result = R R_1 = 空集 for i in 1,2,3,4.....
  • 数据库范式 基础知识 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,比如说...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,892
精华内容 1,956
关键字:

bcnf范式分解