📜  功能依赖性和属性关闭

📅  最后修改于: 2021-05-24 16:37:32             🧑  作者: Mango

功能依赖

如果两个具有相同属性A值的元组也具有相同的属性B值,则关系中的功能依赖项A-> B成立。例如,在表1中所示的关系STUDENT中,功能依赖项

STUD_NO->STUD_NAME, STUD_NO->STUD_PHONE hold

STUD_NAME->STUD_ADDR do not hold

image2

如何找到关系的功能依赖关系?

关系中的功能依赖性取决于关系的域。考虑表1中给出的学生关系。

  • 我们知道STUD_NO对于每个学生都是唯一的。所以STUD_NO-> STUD_NAME,STUD_NO-> STUD_PHONE,STUD_NO-> STUD_STATE,STUD_NO-> STUD_COUNTRY和STUD_NO-> STUD_AGE都是正确的。
  • 类似地,STUD_STATE-> STUD_COUNTRY将为true,就好像两个记录具有相同的STUD_STATE一样,它们也将具有相同的STUD_COUNTRY。
  • 对于关系STUDENT_COURSE,COURSE_NO-> COURSE_NAME将为true,因为两个具有相同COURSE_NO的记录将具有相同的COURSE_NAME。

功能依赖集:关系的功能依赖集或FD集是关系中存在的所有FD的集合。例如,表1中所示的关系STUDENT的FD设置为:

{ STUD_NO->STUD_NAME, STUD_NO->STUD_PHONE, STUD_NO->STUD_STATE, STUD_NO->STUD_COUNTRY, 
  STUD_NO -> STUD_AGE, STUD_STATE->STUD_COUNTRY }


属性关闭:
属性集的属性关闭可以定义为可以从功能上确定的属性集。

如何找到属性集的属性闭包?
要查找属性集的属性闭包,请执行以下操作:

  • 将属性集的元素添加到结果集中。
  • 将元素递归添加到结果集中,可以从功能上确定元素。

使用表1的FD集,可以将属性关闭确定为:

(STUD_NO)+ = {STUD_NO, STUD_NAME, STUD_PHONE, STUD_STATE, STUD_COUNTRY, STUD_AGE}
(STUD_STATE)+ = {STUD_STATE, STUD_COUNTRY}

如何使用属性闭包查找候选键和超级键?

  • 如果属性集的属性闭包包含关系的所有属性,则该属性集将是关系的超级键。
  • 如果该属性集的子集无法在功能上确定该关系的所有属性,则该集合也将是候选关键字。例如,使用表1的FD集,

(STUD_NO,STUD_NAME)+ = {STUD_NO,STUD_NAME,STUD_PHONE,STUD_STATE,STUD_COUNTRY,STUD_AGE}

(STUD_NO)+ = {STUD_NO,STUD_NAME,STUD_PHONE,STUD_STATE,STUD_COUNTRY,STUD_AGE}

(STUD_NO,STUD_NAME)将是超级键,但不是候选键,因为它的子集(STUD_NO)+等于关系的所有属性。因此,STUD_NO将是候选密钥。

门问题:考虑关系方案R = {E,F,G,H,I,J,K,L,M,M}和功能依赖项集{{E,F}-> {G},{F }-> {I,J},{E,H}-> {K,L},K-> {M},L-> {N}在R上。R的关键是什么? (GATE-CS-2014)
A. {E,F}
B. {E,F,H}
C. {E,F,H,K,L}
D. {E}

答:找到所有给定选项的属性闭包,我们得到:
{E,F} + = {EFGIJ}
{E,F,H} + = {EFHGIJKLMN}
{E,F,H,K,L} + = {{EFHGIJKLMN}
{E} + = {E}
{EFH} +和{EFHKL} +会产生所有属性集,但是EFH很小。因此它将是候选密钥。因此正确的选项是(B)。

如何检查是否可以从给定的FD集导出FD?

要检查是否可以从FD集F导出FD A-> B,

  1. 使用FD集F查找(A)+。
  2. 如果B是(A)+的子集,则A-> B为true,否则为true。

门问题:在具有属性A,B,C,D和E的架构中,给出了以下功能依赖关系集
{A-> B,A-> C,CD-> E,B-> D,E-> A}
以上集合未隐含以下哪个功能依赖项? (GATE IT 2005)
A.CD-> AC
B.BD-> CD
C.BC-> CD
D.AC-> BC

答:使用有问题的FD集,
(CD)+ = {CDEAB},这意味着CD-> AC也成立。
(BD)+ = {BD},这意味着BD-> CD无法成立。因此此FD在FD集合中没有隐含。因此(B)是必需的选项。
其他可以用相同的方法检查。

素数和非素数属性

属于任何关系候选键的一部分的属性称为素数属性,其他称为非素数属性。例如,STUDENT关系中的STUD_NO是质数属性,其他是非质数属性。

门问题:考虑一个关系方案R =(A,B,C,D,E,H),其上具有以下功能依赖项:{A–> B,BC–> D,E–> C,D–> A }。 R的候选键是什么? [GATE 2005]
(a)AE,BE
(b)AE,BE,DE
(c)AEH,BEH,BCH
(d)AEH,BEH,DEH

答案: (AE)+ = {ABECD}并非所有属性都设置。因此,AE不是候选密钥。因此,选项A和B是错误的。
(AEH)+ = {ABCDEH}
(BEH)+ = {BEHCDA}
(BCH)+ = {BCHDA},并非所有属性都已设置。因此,BCH不是候选密钥。因此,选项C是错误的。
因此正确答案是D。