📜  属性的关闭

📅  最后修改于: 2020-12-13 05:23:38             🧑  作者: Mango

属性关闭

属性的闭合:属性的闭合可以定义为可以从功能上确定的一组属性。

要么

FD集合F的闭合是可以从F推断出的所有FD的集合F +

涉及F的一组属性X的闭包是在功能上由X确定的所有属性的集合X +

伪代码来查找属性的闭包?

确定X + ,函数依赖集F下X的闭包

X闭包:=将包含X本身;

重复此过程:

旧的X闭包:= X闭包;

对于FD集中的每个功能依赖P→Q

如果X闭包是P的子集,则X闭包:= X闭包UQ;

重复直到(X关闭=旧X关闭);

确定X +,F下X的闭合的算法

输入:关系模式R上的一组FD FD和一组属性X,它是R的子集。

 X+ := X; 
 repeat 
  oldX+ := X+ ; 
  for each functional dependency Y → Z in F do 
       if X+ ⊇ Y then X+ := X+ ∪ Z; 
  until (X+ = oldX+ );

关于属性关闭集的问题:

1)给定具有以下属性PQRSTU和V的关系模式R( PQRSTUV),也存在一组功能依赖关系,表示为FD = {P-> Q,QR-> ST,PTV-> V}。

确定(QR) +和(PR) +的关闭

a)QR + = QR(因为一个属性或一组属性的闭合包含相同的属性)。

现在,按照算法查看一组FD,这些FD可以在任何FD的左侧包含Q,R或QR,因为在FD中QR→ST具有完整的QR。

因此QR + = QRST

再次,跟踪剩余的两个FD,FD的任何左部分包含任何Q,R,S,T。

由于其余两个FD {P-> Q,PTV-> V}中没有完整的左侧包含Q,R,S,T。

因此QR + = QRST (答案)

注意:在FD PTV→V中,T在QRST中,但是不能接受,因为完整的PTV应该是QRST的子集

b)PR + = PR(因为关闭的一个属性或一组属性包含相同的属性)

现在按照算法检查一组FD,并检查所有FD的完整左侧是否包含P,R或PR。由于在FD P→Q中,P是PR的子集,因此PR + = PRQ

再次,跟踪剩余的两个FD ,FD的任何左部分包含任何P,R,Q,因为在FD中QR→ST在PQR中具有其完整的左部分QR

因此PR + = PRQST

再次跟踪剩余的FD {PTV-> V},它的完全左边属于PRQST。由于完整的PTV不在PRQST中,因此我们将其忽略。

因此PR + = PRQST(答案)

2.给定具有以下属性PQRS和T的关系模式R(PQRST),也存在由FD = {P-> QR,RS-> T,Q-> S,T-> P}表示的一组功能依赖性。

确定(T) +的闭合

T + = T(因为一个属性或一组属性的闭包包含相同的闭包)现在,按照算法查找一组FD,以完成任何FD的左侧包含T的情况,因为在FD T→P中,T在T中,因此T + = TP再次跟踪剩余的三个FD,其中FD的任何左部分都包含任何TP,因为FD P→QR在TP中具有其完整的左部分P,因此T + = TPQR再次跟踪剩余的两个FD {RS-> T,Q-> S},其完全左的任何一个都属于TPQR,因为在FD Q→S在TPQR中具有其完全的左部分Q,因此T + = TPQRS再次跟踪其余一个FD {RS-> T},完全左侧属于TPQRS,因为在FD RS中→T在TPQRS中具有其完整的左侧RS,因此T + = TPQRS(因为TQR中已经存在T,所以没有变化),因此T + = TPQRS(答案)。