リレーショナル・モード分解が関数依存性を維持するかどうか

2024 ワード

1つのモードを分解し,関数接続性を維持するか否かを判断する.
分解に無損接続性があるかどうかを判断してください.http://blog.csdn.net/lee18254290736/article/details/79531539
判断の根拠:
    F上の各関数依存がその分解後のある関係で成り立つ場合,この分解は依存を維持する(これは十分な条件である).
    Rを分解すると、R 1、R 2、R 3などに分解された関係がたくさんあります.RではFに多くの関数依存が存在し,Fの各関数依存が分解後のR 1,R 2,R 3にその属性を見つけることができれば,この分解は依存を保つ.見つからない場合は、さらに判断する必要があります.
上記の十分な条件が使えない場合は、以下のアルゴリズムに従って補足し、F上の各α→β次のアルゴリズムを使用します.
アルゴリズム、コアアルゴリズムは最後の2行のみです.
result=γ;   //まず、while(resultが変化する)doを検索する方法を定義します.   //最初に直接実行し、その後resultに対して前回と変化したかどうかを判断する    for each分解後のRi   //各分解された構造Riを1つずつ持ち込む        t=(result∩Ri)+ ∩ Ri   //ここではresultとRiの交差の閉パケット値をとり,その後Riと交差する        result=result∪t
最後のresultに含まれている場合βのすべてのプロパティは、分解と呼ばれ、関数依存性を維持します.そうでなければ、関数依存性は維持されません.
例1:所与の関係パターンR,U={A,B,C,D,E},F={B→A,D→A,A→E,AC→B}は分解するρ={R 1(ABCE),R 2(CD)}が関数依存性を満たすかどうか.
まず,Fにおける各関数依存性を見ると,B−>A,D−>A,AC−>BはいずれもR 1にあり,D−>AはR 1にもR 2にもない.
そこでD->Aが関数依存性に適合しているかどうかを検出する.
前の3つの関数依存性は第1の定理で解決され,D−>Aはアルゴリズムで検出する必要がある.
アルゴリズムの検出:
result=D、ここでDは上のアルゴリズムの中のγ.
そしてresultをFの各関数依存と比較する.
まずB->Aを見ると,このときのBはアルゴリズム中のα,Aはアルゴリズム中のβ.
resultとR 1の交差:
result ∩ R1 = ф(  ),  t=ф,result=D。

resultは変化せず,result=DはAを含んでいないため,この分解は関数依存性を維持していない.
例2:R,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},Rの1つをR 1(AD),R 2(AB),R 3(BE),R 4(CDE),R 5(AE)に分解し,この分解に関数依存性があるか否かを判定することが知られている.
まず、Fの各関数依存性を見ると、R 4にはC->D、DE->Cがある.
A->C,B->C,CE->A.これら3つの関数は分解モードに依存して上書きできませんでした.アルゴリズムを使用して検出を開始します.
まずA->Cについて、
result=A、(A)+=ACD,t=AD,result=AD,result変更,次のループに進む:
result=AD、(ABD)+=ABCD、t=AB、result=ABD.resultが変わり、次のループに進みます.
result=ABD、(ABDE)+=ABCDE,t=BE,result=ABDE.resultが変わり、次のループに進みます.
result=ABDE、(ABCDE)+=ABCDE,t=CDE,result=ABCDE.resultが変わり、次のループに進みます:(このステップから分かるように、関数依存を維持しています.Cが含まれているため)
result=ABCDE、(ABCDE)+=ABCDE,t=AE,result=ABCDE.resultは変更されていません.ループを終了します.、
result=ABCDEはCを含むため,分解は関数依存性を保つ.
残りは面倒で、上の例からどうすればいいかがわかります.ノックしないで、この問題の最後の結果は関数依存を維持します.