保持无损连接和函数依赖的3NF合成算法(详细简介)期末必备

简介: 保持无损连接和函数依赖的3NF合成算法(详细简介)期末必备

解题步骤:


1.求出R上的函数依赖集F的最小函数依赖集Fm



2.如果R中某些属性在Fm中的每个函数依赖的左右两边都不出现,那么就将这些属性从R中分离出去,单独构成一个分解的字模式放入P中。


例如:R(A,B,C)   F={A->B},因为C不在依赖集中,所以可以分解为R1(A,B)  R2(C)


3.如果Fm中有多个左部相同属性的函数依赖,可依据合并率将它们的右部分合并起来。


例如:A->B,A->C,那么A->BC

4.对于Fm中的每一个函数依赖:X->A,构成一个分解的子模式「X,A」放P中。


R(A,B,C,D)   F={A->B,C->D}  R1{AB}   R2{CD},把每一个函数依赖都单独构成分解的子模式



5.检查在分解后的子模式集合中是否包含有R的一个候选码,如果没有包含,则把候选码作为一个分解放入P中(如果有多个候选码,任选1个)


R{A,B,C},假设A是候选键,F={B->C}    R1{BC},R2{A},这里只是假设的情况,因为按照这个例子,在步骤二中A已经被分离出去了

看不懂没关系,来看看例子吧!


例:R(A,B,C,D,E,G),F={A->B,A->C,A->D,A->E,A->G,CDE->G,G->C,G->D}

步骤一:

如果删除A->B,看其余的依赖能否使A推出B

A的闭包={A,C,D,E,G}无B

如果删除A->C

A的闭包={A,B,D,E,G,C}删除A->C

更新F

F={A->B,A->D,A->E,A->G,CDE->G,G->C,G->D}


按照以上步骤继续推:


F={A->B,A->E,CDE->G,G->C,G->D,A->G}


步骤二:


F={A->B,A->E,CDE->G,G->C,G->D,A->G}


F中有R(A,B,C,D,E,G)中的所有元素


步骤三:左部分相同的进行合并:


F={A->BEG,CDE->G,G->CD}


步骤四:


p={R1(ABEG)R2(CDEG)R3(GCD)}


步骤五:

求F下的候选键:

如果不太熟悉的可以看我发布的这篇文章:


http://t.csdn.cn/ITgaC


F={A->BEG,CDE->G,G->CD}


L:A


R:B


LR=C,D,E,G


由A的闭包=ABCDEG=U可以得知:A是唯一候选键

p={R1(ABEG)R2(CDEG)R3(GCD)}


因为R1中包含了A

所以P为一个保持无损连接和函数依赖的3NF


注:R2(CDEG)R3(GCD)


R3是R2的一个子集,P中存在冗余模式,所以把P进行简化,最终得:


P={R1(A,B,E,G)R2(C,D,E,G)}


假如P中无候选键:候选键是N


那么P={R1(A,B,E,G)R2(C,D,E,G),R3(N)},即把N单独分解出来写


这里还有关于保持无损连接的BCNF算法详细讲解,宜一起食用哟!💖💖💖


http://t.csdn.cn/FTJg7


目录
相关文章
|
28天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
127 67
|
4月前
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
116 0
|
3月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
40 3
|
3月前
|
算法 Java 数据安全/隐私保护
国密加密算法简介
国密指国家密码局认定的国产密码算法,主要包括SM1、SM2、SM3、SM4等,并持续完善。SM1是对称加密算法,加密强度与AES相当,需加密芯片支持;SM2是非对称加密,基于ECC算法,签名和密钥生成速度优于RSA;SM3为杂凑算法,安全性高于MD5;SM4为对称加密算法,用于无线局域网标准。本文提供使用Java和SpringBoot实现SM2和SM4加密的示例代码及依赖配置。更多国密算法标准可参考国家密码局官网。
349 1
|
2月前
|
存储 算法 安全
ArrayList简介及使用全方位手把手教学(带源码),用ArrayList实现洗牌算法,3个人轮流拿牌(带全部源码)
文章全面介绍了Java中ArrayList的使用方法,包括其构造方法、常见操作、遍历方式、扩容机制,并展示了如何使用ArrayList实现洗牌算法的实例。
26 0
|
4月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介
**RNN**,1986年提出,用于序列数据,如语言模型和语音识别,但原始模型有梯度消失问题。**LSTM**和**GRU**通过门控解决了此问题。 **CNN**,1989年引入,擅长图像处理,卷积层和池化层提取特征,经典应用包括图像分类和物体检测,如LeNet-5。 **Transformer**,2017年由Google推出,自注意力机制实现并行计算,优化了NLP效率,如机器翻译。 **BERT**,2018年Google的双向预训练模型,通过掩码语言模型改进上下文理解,适用于问答和文本分类。
173 9
|
5月前
|
算法
Raid5数据恢复—Raid5算法简介&raid5磁盘阵列数据恢复案例
Raid5算法也被称为“异或运算”。异或是一个数学运算符,它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。异或的运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)。如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 异或也叫半加运算,其运算法则相当于不带进位的二进制加法。二进制下用1表示真,0表示假。异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。 异或略称为XOR、EOR、EX-OR,程序中有三种演算子:XOR、xor、⊕。使用方法如下z = x ⊕ y z
Raid5数据恢复—Raid5算法简介&raid5磁盘阵列数据恢复案例
|
4月前
|
算法
【算法】贪心算法简介
【算法】贪心算法简介
107 0
|
4月前
|
算法
【算法】递归、搜索与回溯——简介
【算法】递归、搜索与回溯——简介

热门文章

最新文章