保持无损连接和函数依赖的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


目录
相关文章
|
24天前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
188 4
|
17天前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
19 0
|
1月前
|
存储 监控 NoSQL
Redis处理大量数据主要依赖于其内存存储结构、高效的数据结构和算法,以及一系列的优化策略
【5月更文挑战第15天】Redis处理大量数据依赖内存存储、高效数据结构和优化策略。选择合适的数据结构、利用批量操作减少网络开销、控制批量大小、使用Redis Cluster进行分布式存储、优化内存使用及监控调优是关键。通过这些方法,Redis能有效处理大量数据并保持高性能。
52 1
|
20天前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
4天前
|
算法 Java C语言
Java中的算法与C语言中的函数
Java中的算法与C语言中的函数
9 2
|
5天前
|
算法 调度 C++
【调度算法】共享函数vs拥挤距离
【调度算法】共享函数vs拥挤距离
15 1
|
2天前
|
算法 C语言 Python
简单遗传算法优化简单一元函数(python)
简单遗传算法优化简单一元函数(python)
4 0
|
17天前
|
算法
数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)
数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)
9 0
|
17天前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
11 0
|
17天前
|
算法 C语言
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
13 0