发现在模式分解这里还是有网络上的资源蛮少,讲这个东西的人蛮少。而且大家发表的文章,几乎是一模一样的,说的话,举得的例子。所以,写一个尽量让大家都能理解的方法。我现在就说一哈,书本上的定义,我自己的理解,然后例题讲解。希望对大家有帮助!!!

文章目录

  • 主码的求法:
  • NF的判断:
  • 最小函数依赖的求法:
  • 模式分解的无损连接判断
  • 模式分解的保持函数依赖判断
  • 转化为3NF的保持函数依赖分解
    • 教科书算法:
    • 我的归纳:
    • 例题分析:
  • 转化为3NF既有无损连接性又有保持函数依赖的分解
    • 教科书算法
    • 我的归纳
    • 例题分析
  • 转化为BCNF的无损连接分解
    • 教科书算法
    • 我的归纳(我这里还没有理解清楚)
    • 例题分析

主码的求法:

L为只在左边出现的属性
R为只在右边出现的属性
N为左右都没有出现的属性
LR为左右都出现的属性1.只在FD右部出现的属性,不属于候选码;
2.只在FD左部出现的属性,一定存在于某候选码当中;
3.外部属性(N)一定存在于任何候选码当中;
4.其他属性(LR)逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。
一旦你执行到第4步的时候,证明此时候选码将可能不止一个了,请务必小心!!!

原文连接:https://blog.csdn.net/weiyongle1996/article/details/73481163

NF的判断:

1NF:第一范式:列不可分。每一列都是不可分割的基本数据项。
1NF是关系型数据库的基本的要求。如果连这个都不满足的话,就不能称为关系型数据库2NF:在1NF的基础上,对于多关键(就是说主码不是一个属性,而是一个属性组)字表,
非主属性不能部分依赖于主键(eg:只依赖某个主键);对于单关键字表,不存在
部分依赖情况(只依赖一个主键,全部依赖),全符合。
举个例子:F={AB->C,A->D,B->E},那么主码为AB,但是A->D,D仅仅依赖于主码的部分属性A,所以,不满足2NF.
所以总结可以知道,如果所有的候选码都只有一个属性,那么他起码是2NF3NF:在2NF的基础上,非关键字段对任一主键不能传递函数依赖。
非主键列必须直接依赖于主键,不能传递依赖。即不能存在:
非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
总之,非主键列之间不能存在依赖关系。
也就是说,如果非主属性之间存在依赖关系,那么就不是3NF
举个例子:F={X->Y,X->Z,Y->Z};可以看出,主码为X,但是存在非主属性Z对非主属性Y的依赖,所以不满足3NF.
后来我还发现一种这样的情况,假设主码位AB,现在又这样一个函数依赖F={AB->C,AC->D};你看,对于函数依赖AC->D,到底算不算非主属性对码的传递函数依赖呢?这个我也没有问老师,在网路上也没有找到答案,但是从做题的结果来看,这个也是属于3NF的。BCNF:
方式1:在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖。即不存在关键字段决定关键字段的情况。往往不满足BCNF的就是因为表中的候选码不止一个。
方式2:对于我在书本上面看到的说法,意思就是说如果这个3NF后,该模式下的每一个函数依赖左边都含有全部的候选码,就可以视为BCNF举个例子:(S,T)->T,(S,T)->J,T->J。可以看到,这里例子中(S,J)和(S,T)都是候选码,但是在函数依赖T->J中,左边没有包含任一候选码(是(S,J)或者(S,T))。所以,该模式不能称为BCNF判断关系R的NF,会综合主码的求法!

原文链接:https://blog.csdn.net/xuxurui007/article/details/7738330

最小函数依赖的求法:

步骤:
① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭  包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。
注意:最小函数依赖并不是唯一的!
第一步保证了Fm的每一个依赖的右边都是单个属性
第二步保证了Fm中没有多余的函数依赖
第三步保证了Fm中每个函数依赖的左边没有多余的属性

原文链接:https://www.zhihu.com/question/21235096

====================================================================

模式分解的无损连接判断

无损连接的定义:是指对关系模式分解之后,原关系模式下的任一合法的关系实例在分解之后能通过自然连接运算恢复起来。

         我觉得主要就是注意一个问题就是:这里也说了,是循环的对F中的函数依赖一个一个修改,直到表中的有一行不能被修改为止或者有一行全部都是a1,a2…an。我一开始就是没有注意到这个循环这个问题。不能说,你将函数依赖用完一遍后,发现没有一行全部都是a1,a2…an,那么就认为这个不是无损连接的分解。可能我这么说,大家可能还不能理解。我记得我的老师在讲这个问题的时候,问我们:“这个方法是不是和你使用函数依赖的顺序有关?”因为你仅仅使用一遍这个函数依赖,就是会和使用函数依赖的顺序有关。但是,循环使用是没有这个问题的。

判断是不是无损连接的还有一个方法,但是局限性在于分解后只能是二元关系,也就是是只能分解为R1,R2两个关系。这个我们老师上课的时候也讲过这个方法,我当时就仅仅记录了一点而已,理解还不是特别深刻。


这里的使U1就是SA,U2就是SIP。A还可以等于U2-U1

模式分解的保持函数依赖判断

这个我没有看到标准的定义,所以,直接给出一个例题,然后来通过例题分析。

可以看到R1关系中的函数依赖从F中找不到,所以为空集。R2中的函数依赖就有:ZIP->CITY.也就是说,分解后的R1,R2中仅仅只有一个函数依赖ZIP->CITY,丢失了(CITY,ST)->ZIP这个函数依赖。所以,不满足函数依赖保持性。
       通过这个例题可以看到,分解的时候,可能有一个关系就会使其函数依赖为空集。至于为什么会出现这样的事情,以及其实际含义是什么,我还不知道。如果大家知道的话,欢迎留言交流。我总结的模式分解会带来的函数依赖有三种。第一:就是原来F中就可以找到的函数依赖;第二:可以通过原来F中的函数依赖推导出来到函数依赖;第三:没有函数依赖,为空集。
       至于无损连接性大家可以使用上面的判断无损连接的第二个方法,比较快速的就可以判断出来了!

转化为3NF的保持函数依赖分解

教科书算法:


我的归纳:

①:首先将该模式下的函数依赖F转化为最小的函数依赖Fm
②:然后看看有没有N类属性。也就是说,有没有U中有的属性,在F中一次都没有出现的。 如果有这样的属性,得将他们单独作为一个分解关系。
e.g:有U={A,B,C,D,E},F={AB->C}.可看到,在U中有属性D,E在函数依赖F中一次都没有出现过。 所以,将R1={DE}作为一个分解关系
③:对Fm具有相同左部的原则来分解
e.g:就是上面的例子,R1={DE},R2={ABC},所以p={R1(DE),R2(ABC)}

例题分析:

例1:U=(A,B,C,D,E,G) F={BG->C,BD->E,DG->C,ADG->BC,AG->B,B->D} 若R不是3NF,将R分解保持函数依赖的3NF。
         因为过程想要写的详细一点,所以下面我就使用草稿本来做这个题目。

这个题目因为没有N类属性,所以有一个情况的用法可能就没有方法展示,但是基本上大家可以通过看例题的解答过程来解决了!

总结一下,为什么算法要这样设计。理解了之后,有利于知识由点转化为面。这个算法的核心思想就是求出最小函数依赖集Fm。书本上已经证明了"每一个函数依赖集F等价于极小的函数依赖集Fm",所以,采用Fm来代替原来的函数依赖F是可以行的,并且还满足保持函数依赖的定义。

转化为3NF既有无损连接性又有保持函数依赖的分解

教科书算法

我的归纳

①: 首先先分解为3NF并且具有保持函数依赖,设结果为Q={R1,R2…}
②: 然后找到关系R的关键字X,t=Q U {X}
③: 求t的最小集合,就是如果集合t中Ri<=Rj,则消去Ri

例题分析



注意一下在仅仅只要保持函数依赖性的时候,找的是N类属性,但是在既要保持函数依赖,又要保持无损连接的时候,就是还要寻找主码。大家也可以看到,其实这个算法就是在上面分解为3NF并保持函数依赖的基础上,加入了一个主码而已。为什么加入了主码就可以保证无损连接呢?其实大家在取判断无损连接的时候,大家可以去观察以下,一旦你得分解你里面包含主码,那么在它的那一行上面必然可以全部变成a,因为他是主码,自然可以推导出所有。所以,这里加入主码就可以保证无损连接了。

转化为BCNF的无损连接分解

教科书算法

我的归纳(我这里还没有理解清楚)

①: 首先检查该模式是不是BCNF,如果是的话,就不用分解了,因为BCNF一定满足无损分解
②: 如果不是的话,找一个函数依赖,X->Y ,并且X不是R的主码。那么将R分解为Q={S1,S2}
其中S1={XA},S2=U-{Y}.举个例子:F={A->C,C->D,B->C}。主码是AB,所以考虑A->C不满足条件,
将其分解为R1={AC},R2={ABD}={ABCD}-{C}
③: 后面的用一般普通语言不好描述,所以。还是使用一个例子来理解

例题分析



首先要说明的就是在分解为无损连接的BCNF的时候,这个时候的结果是不具有唯一性的。这个我问过我们老师,老师也说了,在你用不同的顺序选取非主属性的时候,此时会有不同的答案。所以说这个结果是不用怀疑的。还有就是关于如何分解后的F1,F2中的函数依赖关系是如何确定的,这个是需要弄清楚的。我拿上面图中左边的方法的F1,F2举例。因为S1={CT},在最开始题目所给的函数依赖中就只有一个可以使用,就是C—>T,但是对于S2={CHRSG},只要含有之前我们选中的C–>T中的T的,都不要。所以将函数依赖:C—>T和HT—>R不要,其他剩余部分组成F2的函数依赖。同样的道理,对于F4的函数依赖也是这样求出来的。因为选中的是HR–>C,所以在F2中有C的都不能要。

这个是使用到的ppt:https://wenku.baidu.com/view/d84ffdbf48649b6648d7c1c708a1284ac9500568.html?from=search

主码求法,范式判断,最小函数依赖求法相关推荐

  1. 数据库逻辑设计 完全函数依赖、部分函数依赖、传递函数依赖、码、候选码、主码、范式

    数据库逻辑设计 R:关系名 U:组成该关系的属性名集合 D∶属性组U中属性所来自的域 DOM:属性 到域的映射 F:属性组U上的一组数据依赖 由于D.DOM对模式设计的关系不大,这里把关系模式简化为一 ...

  2. 数据库期末考试预习之候选码,最小函数依赖集,3NF分解算法,判断第几范式

    一.候选码 参考链接:1 1.定义: 候选码(超级码)就是可以被选为主码的属性或属性组.当一个关系有N个属性或属性组可以唯一标识时,则说明该关系有N个候选码,可以选定其中一个作为主码. 候选码定义: ...

  3. 【数据库】期末复习:SQL语句、关系代数的运算、范式的定义和判断、求最小函数依赖集、ER图转关系模式

    文章目录 SQL语句 查询select 其他 视图 关系代数的运算 并.差.笛卡尔积.投影和选择 连接 自然连接 笛卡尔积 详细版(如果完全不了解就看这里) 范式的定义和判断 如何求候选码 一些例题 ...

  4. 函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。

    目录 关系模式 函数依赖的闭包 属性集闭包 码 求候选键算法 最小函数依赖集 关系模式R(U,D,DOM,F) R:关系名,符号化的元组定义 U:一组属性 D:属性组U中的属性所来自的域 DOM:属性 ...

  5. 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)

    关系数据理论 6.1 为什么要学习关系数据理论 什么是好的数据库逻辑设计 什么是数据依赖 关系模式的简化表示 6.2 规范化 - 关系的规范化理论 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖 ...

  6. 数据库之逻辑设计阶段(候选码、主码、外码、范式…)

    1.总览数据库的生命周期 1.1 需求分析阶段 分析用户需求,是整个数据库设计的基础. 阶段产出: ①分析用户活动,产生业务流程图. ②确定系统范围,产生系统关联图. ③分析用户活动涉及的数据,产生数 ...

  7. 第一范式、第二范式、第三范式、巴斯-科德范式、第四范式、主码、候选码、码详解

    目录 数据库逻辑设计 主码.候选码.码 第一范式 第二范式 第三范式 巴斯-科德范式 第四范式 数据库逻辑设计 前面我们讲了第二范式,我们知道还有第三范式,那么第三范式的特点到底是什么呢?下面我们来一 ...

  8. 数据库部分函数依赖、传递函数依赖的区别以及范式判断

    说到部分函数依赖,传递函数依赖,必须谈到2个概念,"非主属性"和"主属性". 主属性:组成候选码的属性,就是主属性.例如,属性集{学号,姓名,身份证号码,联系电 ...

  9. 函数依赖 候选码 主码 第三范式 BCNF 多值依赖

    关系数据库理论 课本第六章 关系数据库理论 一.函数依赖: 1.完全函数依赖 通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB. 2.部分函数依赖 通过AB能得出C,通过A也能得出C,通 ...

最新文章

  1. iis伪静态排除css_魔众系统伪静态规则怎么配
  2. 直播回顾|慕尼黑工业大学博士详解室内SLAM中的几何约束
  3. jquery瀑布流布局和鼠标滚动加载
  4. 如何快速打造企业ISO体系文件管理
  5. 1.2 内置异常类,异常方法
  6. oracle10g自带的公共同义词,10g ALL_SYNONYMS同义词查询性能下降
  7. 网络之DNS协议图解
  8. Nexus 安装与配置
  9. WPS vba宏插件安装包
  10. android 字体显示框架,资源样式 - 主题 - 《XUI - Android 原生 UI 框架》 - 书栈网 · BookStack...
  11. python工资一般多少p-我会p图,月薪5000,兼职1.5w...
  12. log4j2配置详解及自定义Appender
  13. c语言写入数据到txt,c语言如何将printf产生的数据写到txt文件中
  14. 在ZYNQ7000嵌入式操作系统Debian8下源代码编译安装并配置Ros环境(Kinetic版本)
  15. 吉他的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 装多系统的U盘启动盘的制作
  17. 如何破解那种加密光盘
  18. 20200717——python 复习 一
  19. Transformer的position embedding
  20. 计算机视觉技术英语论文,【毕业论文】外文翻译--计算机视觉技术在工业中的应用.doc...

热门文章

  1. FreeRTOSConfig配置项(持续完善)
  2. c语言程序设计中数据类型有哪些,c语言中基本数据类型有哪些
  3. float型数据与4字节之间的转换
  4. 读取RTKlib生成的pos文件,将XYZ转化为ENU,并绘制RMS柱状图
  5. 人工智能入门必须攻克三道门槛:数学基础、英语水平与编程技术
  6. 无需GPS,一种更低成本的室内导航解决方案,你值得拥有
  7. 促进商品流通 加强区域合作 第二十七届郑交会将促消费进行到底
  8. 米尔科技zynq利用MIO操作LED灯的linux驱动
  9. excel快速填充公式
  10. 《ReactNative》之使用react-native-picker组件选择日期