📜  使用函数依赖查找属性闭包和候选键(1)

📅  最后修改于: 2023-12-03 15:22:22.452000             🧑  作者: Mango

使用函数依赖查找属性闭包和候选键

在关系型数据库中,函数依赖、属性闭包和候选键是非常重要的概念。理解这些概念可以帮助我们设计正确的数据库结构,避免数据冗余和不一致,提高数据访问效率。

函数依赖

函数依赖是指一个或多个属性的值决定另一个属性的值。比如,如果A属性的值决定了B属性的值,我们可以表示为A→B。这里的箭头表示函数依赖符号。

我们可以利用函数依赖来计算属性的闭包,也可以借此找到候选键。

属性闭包

属性闭包是指从给定属性集合中推导出的所有属性集合。也就是说,如果我们知道了属性集合A,那么我们可以利用函数依赖来计算出属性闭包B。B包含了所有可以从A中推导出的属性。

属性闭包的计算可以使用Armstrong公理来实现,Armstrong公理是指在关系模型中任何一个关系都有以下三条基本规则:

  1. 自反律:如果X属于Y,则Y→X;
  2. 增量律:如果X→Y,那么XZ→YZ;
  3. 传递律:如果X→Y,Y→Z,则X→Z。

借助这些规则,我们可以方便地计算属性闭包。下面是一个例子:

给定关系R(A, B, C, D),函数依赖集合F={A→BC, B→AD, CD→E},我们要计算属性集合{A}的闭包。

根据自反律,我们可以得到A→A。接下来,根据增量律和传递律,我们可以得到A→AB、A→ABC。因为B→AD,所以根据传递律,我们可以得到A→ABD、A→ABCD。因为CD→E,所以根据传递律,我们可以得到A→ABCDCE。

最终,{A}的闭包是{A, B, C, D, E}。

候选键

候选键是指可以唯一确定一个元组的属性集合。如果一个关系有多个候选键,那么它们的属性集合是相同的。

借助函数依赖和属性闭包,我们可以方便地找到关系的候选键。具体步骤如下:

  1. 对于给定关系,假设关系的属性集合为R,函数依赖集合为F;
  2. 枚举所有R属性的子集,计算出它们的闭包;
  3. 如果某个闭包包含所有的R属性,那么它就是候选键。

例如,对于关系R(A, B, C, D),函数依赖集合F={AB→C, BC→D, CD→A},我们可以得到以下属性集合的闭包:

  • {A}的闭包是{A, B, C, D};
  • {B}的闭包是{B, D};
  • {C}的闭包是{C, D, A};
  • {D}的闭包是{D}。

因为{A}的闭包包含所有的属性,所以{A}是一个候选键。