3nf和bcnf分解_如何分解成3nf

3nf和bcnf分解_如何分解成3nf1.3NF分解先求出正则覆盖Fc对于Fc里面的所有函数依赖a->b,均转化为Ri=ab对于所有的模式Ri如果包含候选码,进行第4如果都不包含候选码,将任意一个候选码添加到模式Ri里面如果一个模式被另一个模式包含,则去掉此被包含的模式。例子:…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

相关系列:
ER图转为关系模式
无损分解和保持依赖
3NF分解与BCNF分解
正则覆盖与候选码
如何设计ER图(弱实体集)
如何设计ER图(映射基数)


1. 3NF分解

在这里插入图片描述

  1. 先求出正则覆盖Fc
  2. 对于Fc里面的所有函数依赖a->b,均转化为Ri=ab
  3. 对于所有的模式Ri
    • 如果包含候选码,进行第4
    • 如果都不包含候选码, 将任意一个候选码添加到模式Ri里面
  4. 如果一个模式被另一个模式包含,则去掉此被包含的模式。

例子:U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D}

  1. 正则覆盖为{B->DG,CE->B,C->AD}
  2. R1=BDG,R2=CEB,R3=CAD
  3. CE是候选码,R2包含CE
  4. R1,R2,R3没有包含关系
  5. 3NF分解为{BDG},{CEB},{CAD}

例子关系模式r(A,B,C,D,E,F),函数依赖集F: A->BCD,BC->DE,B->D,D->A
1.函数依赖是:A->BC.B->DE,D->A
2.R1=ABC,R2=BDE,R3=DA,不包含候选码(AF,BF,DF)中任意一个,所以任意添加一个R4=AF
3. 3NF分解为{ABC,BDE,DA,AF}

2.BCNF分解

给出R和函数依赖集F:

  1. 求出候选码
  2. 观察函数依赖集,如果左边不是超码(候选码),则不满足条件
  3. 用不满足条件的函数依赖(A->B)进行分解,这样分解之后就满足了
    • R1=AB(这样就满足了)
    • R2=(R-R1)∪A
    • F2={…}去掉B的所有函数依赖,尽可能写全
  4. 对F2进行步骤1的计算。
  5. 重复直到所有的满足条件

在这里插入图片描述在这里插入图片描述


例:R(A,B,C,D,E)
F={A->C,C->D ,B->C,DE->C,CE->A}
候选码为BE
考虑A->C,
R1=AC,R2=ABDE
F2={A->D,B->D,DE->D,BE->A,DE->A},候选码为BE,不是BCNF分解,所以继续分解。
考虑A->D
R21=AD,R22=ABE
F22={BE->A} 候选码为BE,全部满足
所以为{AC,AD,ABE}


例子:
在这里插入图片描述

R候选码为A,CD,BC,E
存在非候选码B,B->D
所以R不是BCNF分解。
考虑B->D,
R1=BD
R2=ABCE
F2={A->BC,BC->E,E->A,BC->A}候选码为A,E,BC
所以BCNF分解为{ABCE,BD}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219147.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月8日 下午11:22
下一篇 2025年7月9日 上午7:01


相关推荐

  • 几种常见mybatis分页实现[通俗易懂]

    几种常见mybatis分页实现[通俗易懂]mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和limit一样的功能,再一个就是利用PageHelper来实现。这里讲解这三种常见的实现方式:无论哪种实现方式,我们返回的结果,不能再使用List了,需要一个自定义对象Pager。packagecom.xxx.mybatis.bean;…

    2022年10月20日
    5
  • log4j 格式_标题的含义和作用ppt

    log4j 格式_标题的含义和作用ppt2019独角兽企业重金招聘Python工程师标准>>>…

    2022年8月22日
    6
  • 1. C语言—输出格式大全[通俗易懂]

    1. C语言—输出格式大全[通俗易懂]1.C语言—输出格式大全#include<stdio.h>intmain(){ //1.整形输出 inta=298;//输出十进制用%d printf(“1.十进制: a=%d\n”,a);//只能采用英文双引号格式,不能用单引号 //2.输出八进制用%o printf(“2.八进制:a=%o\n”,a); //3.使用%#o,可以输出八进制数的前导符(在八进制数前面加一个0,用来标识八进制数), printf(“3.前导

    2022年7月24日
    14
  • MODIS数据产品介绍

    MODIS数据产品介绍中分辨率成像光谱仪(MODerate-resolutionImagingSpectroradiometer)-MODIS是Terra和Aqua卫星上搭载的主要传感器之一,两颗星相互配合每1-2天可重复观测整个地球表面,得到36个波段的观测数据,这些数据将有助于我们深入理解全球陆地、海洋和低层大气内的动态变化过程,因此,MODIS在发展有效的、全球性的用于预测全球变化的地球系统相互作用模型中

    2022年5月30日
    32
  • 一元函数微分学的应用

    一元函数微分学的应用一元函数微分学的应用 几何应用 1 极值与最值的概念 2 3 4 5 6

    2026年3月17日
    2
  • 大数运算的算法设计和C++实现[通俗易懂]

    大数运算的算法设计和C++实现[通俗易懂]1、背景工作中遇到过需要进行极大数据的存储和运算的场景,当时使用Python解决了这个问题,在Python中,整数没有位数限制,使用起来很方便。但是当程序主体使用C/C++实现时,就比较麻烦。所以考

    2022年7月3日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号