规范化理论:候选键的求解理论和算法

 

什么是关键码?

设关系模式R的属性集是U,X是U的一个子集,F是在R上成立的一个函数依赖集。如果X→U在R上成立(即X→U在F^{+}中),那么称X是R的一个超键。如果X→U在R上成立,但对X的任一真子集X^{'}都有X^{'}→U不成立(即X^{'}→U不在F^{+}中,或者X\overset{f}{\rightarrow}U),那么称X是R上的一个候选键。
 

快速求解候选键的一个充分条件

对于给定的关系模式RE(A_{1}A_{2}, … ,  A_{n})和函数依赖集F,可将其属性分为以下四类。

(1)L类:仅出现在F中的函数依赖左部的属性;
(2)R类:仅出现在F的函数依赖右部的属性;
(3)N类:在F的函数依赖左右两边均未出现的属性;
(4)LR类:在F的函数依赖左右两边均出现的属性。

对于给定的关系模式R及其函数依赖集F,有一下结论。

(1)若X(X∈RE)是L类属性,则X必为RE的任意候选键的成员;
(2)若X(X∈RE)是L类属性,且X_{F}^{+}包含了RE的全部属性,则X必为RE的唯一候选键;
(3)若X(X∈RE)是R类属性,则X不在任何候选键中;
(4)若X(Y∈RE)是N类属性,则X包含在R的任一候选键中;
(5)若X(X∈RE)是RE的N类和L类属性组成的属性集,且X包含了R的全部属性,则X
是RE的唯一候选键。

 

下面我们举例说明。

【例1】设有关系模式R(A, B, C, D)与它的函数依赖集F={D→B, B→D, AD→B, AC→D},求R的所有候选键。

解题思路:

通过考察F发现,A,C两属性是L类属性,故A、C两属性必在R的任何候选键中;

又由于(AB)_{F}^{+}=ABCD,即包含了R的全部属性,因此,AC是R的唯一候选键。

 

【例2】设有关系模式R(A, B, C, D, E, P)与它的函数依赖集F={A→D, E→D, D→B, BC→D, DC→A},求R的所有候选键。

解题思路:

通过考察F发现,C,E两属性是L类属性,故C,E两属性必在R的任何候选键中;

由于P是N类属性,故P属性也必在R的任何候选键中;

又由于(CEP)_{F}^{+}= ABCDEP,即包含R的全部属性,因此,CEP是R的唯一候选键。

 

多属性函数依赖集候选键的求解算法

下面我们总结一下求解一个关系R的候选键的一般步骤:
(1)根据函数依赖集F,将R的所有属性分为L类、R类、N类和LR类等四类,并令X代表L类和N类属性,Y代表LR类属性;

(2)求X_{F}^{+},若X_{F}^{+}包含了R的全部属性,则X即为R的唯一候选键,转到步骤(5);

(3)从Y中取一个属性A,求(XA)_{F}^{+},若它包含了R的全部属性,则XA是R的一个候选键,再换另一个属性反复进行这一过程,直到试完Y中所有的属性;
(4)这次每轮从Y中取两个、三个、多个属性并到属性集X中,每轮仿照步骤(3)的动作,耐心地求出关系R的全部候选键;

(5)停止,输出结果。

 

【例3】设有关系模式R(A, B, C, D, E)与它的函数依赖集F={A→BC, CD→E, B→D, E→A},求R的所有候选键。
解题思路:

通过分析F发现,其所有的属性A、B、C、D、E都是LR类属性,没有L类、R类、N类属性;

因此,先从这些属性中依次取出一个属性,分别求它们关于F的闭包:

A_{F}^{+}=ABCDE,B_{F}^{+}=BD,C_{F}^{+}=C,D_{F}^{+}=D, E_{F}^{+}=ABCDE

由于A_{F}^{+}E_{F}^{+}都包含了R的全部属性,因此,属性A、E分别都是R的一个候选键;

接下来,从关系模式R中取出两个属性,分别求它们关于F的闭包,但在取出两个属性时,只能从B,C,D三个属性中取出两个属性,因为属性A、E已经是R的候选键了,根据候选键的定义,它们就不可能再存在于其他的候选键中:

(BC)_{F}^{+}=ABCDE,(CD)_{F}^{+}=ABCDE,(BD)_{F}^{+}=BD

由于(BC)_{F}^{+}(CD)_{F}^{+}都包含了R的全部属性,因此,属性集BC,CD也分别都是R的一个候选键;

至此,关系模式R中不可能再存在别的候选键了,因此,关系模式R的所有的候选键分别是A、E、BC和CD。

 

 

 

参考资料:[1]陈志泊,王春玲,许福,范春梅.数据库原理及应用教程(第3版)[M].北京:人民邮电出版社,2014:136-137.
 

 

 

 

 

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
数据挖掘关联规则挖掘是一种常见的数据挖掘技术,用于发现数据集中的频繁项集和关联规则。频繁项集是指在数据集中经常出现在一起的一组项,而关联规则是指两个或多个项之间的关系。关联规则通常采用“如果...那么...”的形式表示,例如“如果顾客购买了牛奶和面包,那么他们也可能购买黄油”。 常见的关联规则挖掘算法包括Apriori、FP-growth、Eclat和ORAR等。Apriori算法是一种基于频繁项集的挖掘算法,它通过迭代的方式生成候选项集,并使用剪枝技术来减少候选项集的数量。FP-growth算法是一种基于树结构的挖掘算法,它通过构建一棵FP树来发现频繁项集。Eclat算法是一种基于垂直数据格式的挖掘算法,它通过交换和合并项集来发现频繁项集。ORAR算法是一种基于关联规则的挖掘算法,它通过对关联规则进行排序和过滤来发现有用的规则。 对于给定的数据集,关联规则挖掘算法通常包括以下步骤: 1. 数据预处理:包括数据清洗、数据变换和数据规约等步骤。 2. 频繁项集挖掘:使用Apriori、FP-growth、Eclat等算法来发现频繁项集。 3. 关联规则生成:对于每个频繁项集,生成所有可能的关联规则。 4. 关联规则评估:使用支持度、置信度、提升度等指标来评估关联规则的质量。 5. 关联规则筛选:根据指定的阈值来筛选出有用的关联规则。 <<请问关联规则挖掘有哪些应用场景?>> <<关联规则挖掘算法有哪些优缺点?>> <<如何评估关联规则的质量?>>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值