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

article/2025/8/30 8:30:23

 

什么是关键码?

设关系模式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.
 

 

 

 

 


http://chatgpt.dhexx.cn/article/vXdfkO5A.shtml

相关文章

数据库中的超键 候选键 主键 外键

这里写目录标题 数据库中的超键 候选键 主键示例说明 数据库中的超键 候选键 主键 见下图: 示例说明 学号身份证姓名班号班位置SN001SF1张三CN_a3层SN002SF2李四CN_a3层SN003SF3王五CN_a3层SN004SF4李六CN_b4层SN005SF5谭七CN_b4层SN006SF6张三CN_a3层 由表可得…

MySQL之候选键

文章目录 MySQL之候选键1.主键和候选键的区别 MySQL之候选键 1.主键和候选键的区别 表格的每一行都由主键唯一标识,一个表只有一个主键; 主键也是候选键,按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用

求候选键

根据题干,画图: 由于从D出发可找到A、E,然后CA结合又能找到B,因此通过CD可遍历所有元素,因此候选键为CD。 求候选键,就是找可遍历所有元素的元素组合。

数据库主键、外键、超键、最左前缀原则

首先看看各种键的定义: 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键 候选键(candidate key):不含有多余属性的超键称为候选键 主键(primary key):用户选作元组标识的一个候选键程序主键 外键(foreign key)如果关系模式R1中的某属性集不是…

C语言实现数组长度计算方法

写C时,经常要用到计算数组长度,我一般用下面这种方法: #define LEN(x) sizeof(x) / sizeof(x[0]) 即利用库函数sizeof来计算数组长度,这种方法,对一维数组和多维数组都有效,如以下代码示例: …

c语言输入变量字符串数组的长度,c语言数组长度问题?

onemoo 内容太长,我另写一个回答:对于不确定将要存储多少个字符的情形,你只能先定义一个足够长的数组,比如char s[256]; 在接受输入时不要用那种可以一次性存入一串字符的函数(如scanf("%s", s)),因为你不知…

c语言怎么获取数组的长度,C语言怎么获取数组的长度

c语言中,定义数组后可以用sizeof命令获得数组的长度【可容纳元素个数】,通过传递数组名参数到子函数中,以获得数组长度是不可行的。 c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数) 如:{ int data…

第六章 C语言数组_C语言变长数组:使用变量指明数组的长度

在《C语言的三套标准:C89、C99和C11》一节中我们讲到,目前经常使用的C语言有三个版本,分别是 C89、C99 和 C11。C89(也称 ANSI C)是较早的版本,也是最经典的版本,国内大学几乎都是以该版本为基础…

C语言 数组长度

借助sizeof()函数 # include <stdio.h> int main(void) { int a[10] {0};printf("sizeof(a) %d\n", sizeof(a));return 0; }sizeof(a) 40 ,数组 a 是 int 型的&#xff0c;每个元素占 4 字节&#xff0c;所以长度为 10 的数组在内存中所占的字节数就是 4…

C语言0长度数组(可变数组/柔性数组)详解

CSDNGitHubC语言0长度数组(可变数组/柔性数组)详解AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 1 零长度数组概念 众所周知, GNU/GCC 在标准的 C/C 基础上做了有实用性…

C语言的数组长度能用变量指定吗?

疑问&#xff1a;C语言的数组长度能用变量指定吗&#xff1f; 回答&#xff1a;在支持C99的编译器下可以。 一、背景简介 C89/C90&#xff1a; C89即ANSI C&#xff0c;ANSI&#xff1a;美国国家标准学会&#xff08;American Natinal Standards Institute&#xff09;C90即I…

空间平面及其方程

目录 1. 方程类型2. 常见问题 F&#xff08;x&#xff0c;y&#xff0c;z&#xff09; 0 几何意义 空间中的平面 1. 方程类型 点法式 A&#xff08;x - x0&#xff09; B&#xff08;y - y0&#xff09; C&#xff08;z - z0&#xff09; 0 &#xff08;A&#xff0c;B&am…

三维空间平面拟合MATLAB

1.根据一组点的坐标拟合空间平面&#xff0c;有两种方法&#xff1a; 第一种&#xff1a;如果在测量得到的数据中&#xff0c;x&#xff0c;y值都是确认没有误差的&#xff0c;而误差只是出现在z值上&#xff0c;则可以使用线性回归的方法&#xff0c;此方法最小二乘的目标是在…

空间曲面构造及其方程

&#xff11;.旋转单叶双曲面 旋转单叶双曲面是直纹面&#xff0c;它的构造有多种方式&#xff0c;先看其中一种: 设直线的参数方程为&#xff1a; 则通过geogebra命令 bCurve(1,t,2t,t,-5,5) 绘制出的直线如图所示&#xff0c;它将作为旋转单叶双曲面的&#xff02;直纹&quo…

三维空间:点到线的距离,点到面上的投影,直线在平面上的投影直线方程(平面束)

你好哦&#xff0c;这里是云切月斩&#xff08;Echo_Fish&#xff09;&#xff0c;本文章如果能加深你对于高等数学知识点的理解&#xff0c;那么我将不胜荣幸&#xff01;如果本文章存在错误请不吝赐教&#xff01; 一、点到线的距离&#xff08;已知一个点和直线的一般式&…

0803平面及其方程-向量代数与空间解析几何

文章目录 1 曲面方程与空间曲线方程的概念1.1 曲面方程1.2 空间曲线的方程 2 平面的点法式方程3 平面的一般方程4 两平面的夹角4.1 两平面夹角的定义4.2 夹角的余弦公式4.3 点到平面的距离 结语 1 曲面方程与空间曲线方程的概念 1.1 曲面方程 如果曲面与三元方程 ​ F ( x …

空间解析几何中那些图形和方程(大彻大悟版)

文章目录 前言一、平面及其方程平面的点法式方程平面的一般方程平面的截距式方程两平面的夹角点到平面的距离公式 二、空间直线及其方程空间直线的一般方程空间直线的对称式方程&#xff08;点向式方程&#xff09;空间直线的参数方程两直线的夹角直线与平面的夹角平面束方程 三…

平面方程

平面方程 原文链接&#xff1a; http://www.songho.ca/math/plane/plane.html 飘飘白云 译( http://www.cnblogs.com/kesalin) (转载请注明出处以及作&译者信息&#xff0c;非商业用途) 平面方程 平面上的一点以及垂直于该平面的法线唯一定义了 3D 空间的一个平面。 (图一)…

空间解析几何 | 平面束方程及其应用

一、对直线在平面上的另一种描述。 二、 平面束及其方程。 三、 求空间直线在平面上的投影方程。 求满足一定条件的平面方程。&#xff08;注意&#xff01;这个解答是不完整的&#xff01;&#xff09; 摘录 https://jingyan.baidu.com/article/3c48dd34cfdec1e10be358f5.htm…

已知空间一点和法向量,如何计算空间平面方程

2018-01-18 创建人&#xff1a;Ruo_Xiao 邮箱&#xff1a;xclsoftware163.com法向量N&#xff1a; 点P&#xff1a; 平面方程&#xff1a;