首先,怎么判断一个关系是不是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 办公室
小明 计算机系 数据库 2021 5 张三 B123
小明 计算机系 C语言 2020 5 张三 B123
小红 电子系 网络基础 2020 5 李四 A123
小花 软件系 数据库 2020 5 王五 A112
小花 软件系 网络基础 2021 5 李四 A123
小白 电子系 高等数学 2020 2 赵六 C123
小胖 计算机系 C语言 2019 5 周七 B112
小强 软件系 高等数学 2020 2 赵六 C123
小林 计算机系 英语 2020 5 田八 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范式的判断和分解相关推荐

  1. 数据库范式判断及分解技巧

    这个博客就当自己的笔记了,写的不好不对的地方,大家多多指教啦.数据库中的范式是考试中必考的重点,也是应用中比较实用的操作标准.不说废话了,下面将分段来从不同深度开始说. [前驱知识补充] 函数依赖 简 ...

  2. 关于1NF、2NF、3NF、BCNF范式

    首先要明白"范式(NF)"是什么意思.按照教材中的定义,范式是"符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度".很晦涩吧?实际上 ...

  3. 3NF的无损连接和保持函数依赖的分解、BCNF的无损连接的分解

    首先,需要了解3NF.BCNF范式的要求. 3NF:不存在非主属性对码的传递函数依赖或部分函数依赖. 如AB-C,A->C  码为(A,B),A,B是主属性,C是非主属性,C部分函数依赖于码,即 ...

  4. 数据库第一范式、第二范式、第三范式、BCNF范式

    文章目录 什么是"范式(NF)" 1. 第一范式(1NF) 2. 第二范式(2NF) 2.1 函数依赖 2.1.1完全函数依赖 2.1.2 部分函数依赖 2.2 码 2.3 非主属 ...

  5. 范式的判断:方法+例题

    范式的判断 例1:R=(A,B,C),F={A→B,B→A,C→A},请问这是第几范式? 判断步骤:一图了解范式 一.首先判断候选键: 分别找出只在左边出现.左右都出现.右边出现的键. (其实能找到只 ...

  6. mysql中bcnf_请问数据库设计中BCNF范式是什么意思?

    展开全部 BCNF范式在3NF基础上消除对主码子集的62616964757a686964616fe78988e69d8331333431373230依赖. 以仓库管理关系表为例:仓库号,存储物品号,管 ...

  7. 第一范式,第二范式,第三范式,BCNF范式理解

    基础知识 实体:现实世界中客观存在并可以被区别的事物.比如"一个学生"."一本书"."一门课"等等.值得强调的是这里所说的"事物& ...

  8. 判断模式分解是否为无损连接的方法

    判断模式分解是否为无损连接的方法 [方法步骤] ρ = { R1<U1 , F1> , R2<U2 , F2> , - , Rk<Uk , Fk> } 是关系模式 ...

  9. 数据库 部分函数依赖 完全函数依赖 传递函数依赖 第一范式、第二范式、第三范式、BCNF范式区别

    数据库 部分函数依赖 完全函数依赖  传递函数依赖  第一范式.第二范式.第三范式.BCNF范式区别 在理解函数依赖之前,先来看一下函数依赖分析: 在关系中,包括在任何候选码中的属性称为主属性:不包括 ...

  10. 数据库BC范式(BCNF)判断和分解

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

最新文章

  1. 第三天:Vue的组件化
  2. Mobile3DRecon:手机上的实时单眼3D重建
  3. 15、计算机图形学——基于AABB进行光线追踪的加速(上)
  4. 读书感悟 1 孙子兵法虚实篇(最重要的事情只有一件)
  5. 计算机最小二乘法拟合,数值计算_第6章 曲线拟合的最小二乘法.doc
  6. OpenStack的部署T版(六)——Neutron组件
  7. 数据湖之iceberg系列(五)-Spark实时处理数据
  8. 接口测试基础之入门篇(待续)
  9. Java和JavaScript之间的区别
  10. Flex动态创建多个曲线图+柱形图
  11. SpringMVC相关
  12. SilverLight:”无法启动调试--未安装 Silverlight Developer 运行时。请安装一个匹配版本”的解决方案。
  13. 图层重命名快捷键_图层的基础知识
  14. 二元线性方程组与二阶行列式
  15. 路由器的两个端口接在同一个交换机上_2个路由器怎么连接?
  16. html英文字母大小,英语字母书写笔顺 英语 , 26个英文字母大小写规范书写技巧...
  17. 从零开发短视频电商 阿里云架构图
  18. windows xp系统账号密码忘记解决办法
  19. 路由器工作原理及其主要部件详解
  20. 5 个牛逼的算法设计,你知道几个?

热门文章

  1. 魔兽世界服务器 运行状态,服务器状态查询,魔兽怀旧服务器状态查询
  2. comsol移动网格_COMSOL动网格调试
  3. 东芝Toshiba TS-8200F 打印机驱动
  4. 软考-中级-网络工程师-知识点个人总结(一)
  5. HTTP和HTTPS的区别,SSL的握手过程,kotlin协程异常
  6. 视频如何分解成图片?怎么提取视频中的图片?
  7. Java开发企业微信功能
  8. ICCV2021 多目标跟踪(MOT)汇总
  9. PCAN busoff问题解决方案
  10. IIC总线协议详解与总结