精华内容
下载资源
问答
  • 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的。这个过程和上一个方法可能不一样,但是最终结果的所有表都是一样的。

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

    如有错误,欢迎指正。

     

     

    展开全文
  • 数据库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.所有非主属性对每一个码...

    书中的概念:

    关系模式R〈U,F〉∈1NF。若X→Y且Y不包含X时X必含有码,则R〈U,F〉∈BCNF。
    也就是说,关系模式R〈U,F〉中,若每一个决定因素都包含码,则R〈U,F〉∈BCNF。

    关系模式的定义可以得到如下结论,若R属于BCNF,则R有:

    1.所有非主属性对每一个码都是完全函数依赖

    2.所有的主属性对每一个不包含它的码,也是完全函数依赖。

    3.没有任何属性完全函数依赖于非码的任何一组属性。

     

    我的理解:

    非码属性不要完全决定码属性,主属性也不要部分/传递依赖码属性,

    换句话来说,就是X→Y时,X一定含有码(候选码中的任意一个)

    如:

    例1:

    在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。

    每一教师只教一门课。每门课由一名教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称 : (S,J)→T,(S,T)→J,T→J

    显然,在STJ中,(S,J),(S,T)都是候选码,S,T,J都是主属性,所以没有非主属性对码的传递依赖和部分依赖,所以属于3NF。

    但是T→J的决定因素既不包含候选码(S,J),也不包含候选码(S,T),所以不是BCNF。

    也可以用以上三条结论认证。

    (1)当(S,J)为码时,主属性T依旧被码属性J依赖(T→J),违背了以上第3条。

    (2)当(S,T)为码时,主属性J依旧被码属性T部分函数依赖(T→J),违背了以上第2条。

    综上所述,关系模式STJ不是BCNF。

     

    如何将它们改成BCNF呢?

    书上有分解法的算法,可以将模式转换为BCNF。书上的很抽象,但是运用起来很简单。简单来说就是把不合法的属性拆出来组成新的模式。

    T→J的决定因素既不包含候选码(S,J),也不包含候选码(S,T),所以将其分解,T+J是U的真子集,故分解:S1:{TJ},将被确定的J移除:S2:U-{J}={S,T}

    所以原模式被分为ST(S,T)和TJ(T,J)

     

    同样的算法,例2:

    那么关系模式 dep(D,M,G,N)中D表示仓库名,M表示管理员,G表示货物名,N表示货物的数量 

    已知函数依赖集:D → M,M → D,(D,G)→ N

    将其分为BC范式:

    主属性:D,M,G

    候选码:(D,G),(M,G)

    D → M,M → D,D和M都不包含候选码(D,G),也不包含候选码(M,G)

    此时分解:D → M:S1:{D,M},S2:U-M{D,G,N}   

                     这时,有S1{D → M},候选码D,S2{(D,G)→ N}候选码(D,G),满足BCNF,分解完成。

    或者分解:M → D:S1:{M,D},S2:U-D{G,M,N}

                     这时,有S1{M → D},候选码M,S2{(D,M)→ N}候选码(D,M),满足BCNF,分解完成。

    所以要想使模式满足BC范式,本例有两种分解方式。

    展开全文
  • 范式BCNF,3NF的判断方法

    千次阅读 2020-06-26 22:54:15
    2、根据BCNF和3NF的定义进行判断。 例题1 Consider the following relational schema R(A,B,C). suppose that the only dependencies (functional or multivalued) that hold on the relation in this schema are BC...

    步骤:1、求出关系模型R的所有候选码
    2、根据BCNF和3NF的定义进行判断。

    例题1

    Consider the following relational schema R(A,B,C).
    suppose that the only dependencies (functional or multivalued) that hold on the relation in this schema are BC->A, A->C, and all dependencies that follow from these two.
    This schema is in
    A、3NF
    B、BCNF
    C、4NF
    D、none of these

    1.由于没有能推出B的,说明B是候选码的真子集。然后看AB能推出C,说明AB是候选码;看BC能推出A,说明BC也是候选码。

    故所有候选码是AB,BC。

    2.判断3NF:
    由于A-BC=A在候选码AB中,C-A=C在候选码BC中,满足3NF的定义,所以是3NF。

    3.判断BCNF:
    BC是超码(因为之前求出BC是候选码),但是A不是超码(AB才是超码),故不满足BCNF的定义,不是BCNF。

    例题2

    在这里插入图片描述
    (a)由于C和D不能被推出,说明CD是候选码的真子集。然后看ACD可以推出B、E,说明ACD是候选码。同理可以推出BCD,ECD也是候选码。

    故所有候选码是ACD,BCD,CDE。

    (b)B-A=B在BCD中,E-BC=E在CDE中,A-ED=A在ACD中,故是3NF。

    (c)A,BC,ED都不是超码,故不是BCNF。

    展开全文
  • BCNF/3NF的判断方法

    千次阅读 2015-01-04 14:54:00
    判断是否是 3NF 的条件: 对于 R 上的每个函数依赖 X->...判断是否是 BCNF 的条件:对于 R 上的每个函数依赖 X->A(X 是关系 R 属性的一个子集,A 是 R 的一个属性) ,以下条件中的一个成立:1 X ∈A2 X 是超...

    判断是否是 3NF 的条件: 对于 R 上的每个函数依赖 X->A (X 是关系 R 属性的一个子集,
    A 是 R 的一个属性) ,以下条件中的一个成立:
    1 X ∈ A
    2 X 是超码
    3 A 是 R 的码的一部分

    判断是否是 BCNF 的条件:对于 R 上的每个函数依赖 X->A(X 是关系 R 属性的一个子
    集,A 是 R 的一个属性) ,以下条件中的一个成立:
    1 X ∈ A
    2 X 是超码

    例子如下:

    (a).
    {ACD}+
    = {A、C、D、B、E}
    {BCD}+
    ={B、C、D、E、A}
    {EDC}+
    ={E、D、C、A、B}
    ACD、BCD、CDE are keys for R.

    (b)判断是否是 3NF 的条件: 对于 R 上的每个函数依赖 X->A (X 是关系 R 属性的一个子集,
    A 是 R 的一个属性) ,以下条件中的一个成立:
    1 X∈ A
    2 X 是超码
    3 A 是 R 的码的一部分
    A->B 满足条件 3
    BC->E 满足条件 3
    ED->A 满足条件 3
    所以 R 是 3NF
    (c)判断是否是 BCNF 的条件:对于 R 上的每个函数依赖 X->A(X 是关系 R 属性的一个子
    集,A 是 R 的一个属性) ,以下条件中的一个成立:
    1 X ∈ A
    2 X 是超码
    A->B 不满足 1&2
    BC->E 不满足 1&2
    ED->A 不满足 1&2
    所以 R 不是 BCNF

    转载于:https://www.cnblogs.com/instant7/p/4201160.html

    展开全文
  • title: 关系数据库设计(F+闭包、候选码求解、范式判断BCNF分解) date: 2018-11-12 21:46:32 tags: SQL categories: 数据库、SQL 这是基于github的个人博客:Josonlee’s Blog 文章目录F+闭包怎么求关系...
  • 如何判断范式(1NF、2NF、3NF、BCNF

    千次阅读 多人点赞 2020-05-16 18:23:39
    同样在这里不提及过多的概念、原理,直接讲如何判断范式 ps.关于如何求候选码见我的另一篇博客https://blog.csdn.net/m0_37345402/article/details/106162563
  • 详解第一范式、第二范式、第三范式、BCNF范式

    万次阅读 多人点赞 2019-03-02 16:08:45
    文章目录第一范式定义以及分析:问题研究:第二范式必备知识点函数依赖:码:非主属性 :定义分析:解决办法:问题研究:第三范式:定义:分析:问题研究:BCNF范式分析问题研究小结: 第一范式 定义以及分析: 首先是...
  • 范式判断的三个步骤 假设我们有关系模式R(A,B,C),函数依赖F={AB->...3.判断范式标准:1NF,2NF,3NF,BCNF,4NF 各个范式定义 1NF:属性不可分割。 例如 关系模式:学生(姓名,住址),而住址又包含(区,
  • 简单来说,先看第一篇文章,知道怎样建矩阵,然后判断方法就根据第二篇,比如A->D, 如果有两行在A列上相等而在D列上不相等,1.如果D列上有a,则把对应的两行都改为a   2.没有a就用D列上的b代替 BC->D这些也...
  • 数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF1.说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合。 例(1): 设有关系模式R(U,F),其中U={A,B,C,D,E...
  • 数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF 1.说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合。 例(1): 设有关系模式R(U,F),其中U={A,B,C,D,E...
  • 举例2:已知R,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一个分解为R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判断这个分解是否具有无损连接性。 ① 构造一个初始的二维表,若“属性”属于“模式”中的...
  • 具有无损连接性的BCNF分解 C++实现

    千次阅读 2014-11-27 11:12:48
    BCNF是3NF基础上的一种特殊情况,每个属性不传递依赖于R的候选键(包含关系),即每个表中只有一个候选键。 算法伪代码 输入:关系模式R以及R上的函数依赖集F 输出:R的BCNF分解Result,它关于F具有无损连接性 方法...
  • 3NF BCNF 分解算法

    千次阅读 2019-06-19 09:35:03
    (2)如果关系模式不是BCNF,找到里面的函数依赖,X->A,如果X不是键,那么删除A,并将XA划为新的子集(此时该子集的依赖左侧都是键) (3)都是BCNF,否则继续分解剩余元素集。 求属性闭包的算法 设 R,F>,A为U...
  • BCNF与反范式设计BCNF(巴斯范式)反范式设计反范式存在的问题和适用场景数据仓库和数据库在使用上的区别总结 反范式设计是什么,有了范式设计,为什么还需要反范式设计。反范式设计适用的场景是什么?存在什么问题 3...
  • BCNF保持无损的分解方法 先求最小依赖集合 看每个依赖是否符合BCNF 是,结束 否,例如X->A,将X->A单独拿出来,将属性集合一分为二。第一部分是(XA),第二部分不包含A的集合。分别求最小依赖集合,重复...
  • (AE),判断这个分解是否具有无损连接性。  ① 构造一个初始的二维表,若“属性”属于“模式”中的属性,则填a j ,否则填b ij ② 根据A→C,对上表进行处理,由于属性列A上第1、2、5行相同均为a 1 ,所以将...
  • 模式分解为3NF BCNF

    2020-04-09 03:15:42
    https://www.bilibili.com/video/BV1eE411a79r讲的很好!
  •   觉得下面这篇文章总结的很好, 逻辑清晰,实例演示。 在此记录一下,方便以后查看。 点击下方文字跳转 关系数据库的三大范式以及BCNF范式
  • BCNF和第三范式的分解算法

    千次阅读 2019-12-20 19:18:25
    范式概念 ...BCNF:对于关系模式R的函数依赖集,每个依赖都必须符合下面两个至少有一项成立: 1,a——>b是平凡的函数依赖,即b属于a。 2,a——>b,其中a是关系模式R的一个超码。 这里我们对B...
  • 转换成BCNF的保持无损连接的分解

    千次阅读 2019-04-02 18:10:46
    转换成BCNF的保持无损连接的分解 算法1: 例3: 关系模式R<U,F>,其中U={C,T,H,R,S,G}, F={CS→G,C→T,TH→R,HR→C,HS→R},将其分解成BCNF并保持无损连接。 例4:关系模式R<U,F>,其中:U={A,B,C,D,....
  • 范式判断流程图 1. 四种范式之间关系   2. 第二范式、第三范式、BCNF区别: 2NF:非主键列和主键列之间,是完全依赖于主键,还是依赖于主键的一部分(只依赖某个主键); 3NF:非主键...
  • **1范式到3范式的定义都很明确也很好理解,但是BCNF的定义和判别条件很多教科书上有很多种,很容易晕,下面先引出几个码的定义,然后给出具体例子谈谈BCNF的理解**。 1.码 要想理解BCNF首先要搞清楚几个码的定义。 ...
  • 数据库原理-模式分解算法详解(3NF BCNF

    千次阅读 多人点赞 2020-05-04 12:20:26
    模式分解算法模式分解的要求无损连接保持函数依赖模式分解的算法范式简述3NF的保持依赖性分解3NF的无损连接与依赖保持分解BCNF的无损连接分解 模式分解的要求 无损连接 保持函数依赖 模式分解的算法 范式简述 3NF的...
  • 数据库范式分为:1NF,2NF,3NF,BCNF,4NF,5NF,6NF;一般的数据库到3NF就可以满足基本的设计要求。 范式 定义 1NF 关系中每个属性不可再分 2NF 在第一范式的基础上消除非主属性对于任何一个候选码的...

空空如也

空空如也

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

bcnf的判断