首先了解一下幾個概念:
1)把乙個關係模式分解成若干個關係模式的過程,稱為關係模式的分解。
2)把低一級的關係模式分解為若干個高一級的關係模式的方法不是唯一的。
3)只有能夠保證分解後的關係模式與原關係模式等價,分解方法才有意義。
對於第一句話,為什麼需要分解關係模式?因為原來的關係模式可能造成資料冗餘或
給資料庫帶來潛在的不一致性。對於第二句話,根據不同語義,分解的原則也不盡相
同,所以方法肯定是不唯一的,譬如u=,根據不同原則(隨便你自己定),
可能分成(a,b)(a,c)也可能分成(b,c)(a,c)。對於第三句話,則是本文所要
講的內容。
為了保證
分解後的關係模式與原關係模式等價,我們要判定
1)分解後形成的行的關
系模式中是否為無損連線 2)是否保持函式依賴
一、無損連線的判定:
1)如果分解後的的關係模式是形如這,裡面只有兩個,那很好做,就判斷
或是否成立,成立的話肯定是
無損連線。
2)如果是兩個以上
這種,那就比較麻煩了,
比如,有屬性集,
abcdef,存在這樣的函式依賴集,然後有
這樣的分解。
例如:設u1=abc,u2=bd,u3=bef,根據提供的函式依賴集,我們可得u1存在這樣的
函式依賴
a->bc,
u2上的函式依賴是b
->d, u3的函式依賴是be
->f。
1)於是可構造這樣的**。ga
bcd e
fa->bc
b->d
be->f
d2)各自判斷a,b,c,d,e,f是否有在g列的函式依賴中,如果有記為ai,i表示第幾列,否
則記為bji,表示第行第i列如:g
abcd
efa->bc
a1(a有在函式依賴中,此行為第一行)
b->d
be->f
b31(a沒有,此列為第一列)
這樣我們可得到圖:g
abcd
efa->bc
a1a2
a3b14
b15b16
b->d
b21a2
b23a4
b25b26
be->f
b31a2
b33b34
a5a5
3)接下來是關鍵的,
如果我們經過一系列變換得到有一行是這樣的排序
,即不存在bji,
那我們就認為,該分解是無損連線。
4)變換過程:為了方便,我們可以按a->bc, b
->d,be
->f這個順序來(隨你喜
歡)。第一遍,根據
a->bc,
我們知道主健是能唯一標識乙個元組的,也就是說如果
a中存在著兩個屬性值是相同的
,毫無疑問,他們推出的bc的值肯定也是相同的。從
**中我們遍歷a列,沒有發現有相同的屬性組,那就跳過。
第二遍, 根據
b->d,因為b列屬性值相同,那我們修改d列。
修改時遵照這樣的乙個
規則,如果d中有ai這樣的值,那麼宣布修改為ai,如果沒有,修改成該列的第一行的
第乙個值。
從**中我們可以發現d中有a4,那麼修改後變成:ga
bcd e
fa->bc
a1a2
a3a4
b15b16
b->d
b21a2
b23a4
b25b26
be->f
b31a2
b33a4
a5a5
第三遍,根據be
->f,找一組be相同的值,發現不存在,即不存在類似
這樣的序列,即該分解不是無損連線分解。
二、是否保持函式依賴?
這個的判斷方法就比較簡單了,還是這道題,
有屬性集,
abcdef,存在這樣
的函式依賴集,然後有
這樣的分解
。設u1=abc,a->bc,
u2=bd,
b->d ,u3=bef,be
->f ,即我們不能推出 cd
->e ,ef
->a,
所以也不具有保持函式依賴的特性
。
資料庫 無損分解和保持依賴
以下的論述都基於這樣乙個前提 r是具有函式依賴集f的關係模式,r1 r2 是r的乙個分解。首先我們給出乙個看似無關卻非常重要的概念 屬性集的閉包。令 為一屬性集。我們稱在函式依賴集f下由 函式確定的所有屬性的集合為f下 的閉包,記為 下面給出乙個計算 的演算法,該演算法的輸入是函式依賴集f和屬性集 ...
資料庫概論之無損分解
無損分解指的是對關係模式分解時,原關係模型下任一合法的關係值在分解之後應能通過自然聯接運算恢復起來。反之,則稱為有損分解。設r是乙個關係模式,f是r上的乙個依賴集,r分解為關係模式的集合p 如果對於r中滿足f的每乙個關係r,都有r r1 r r2 r rn r 則稱分解相對於f是無損連線分解,否則有...
資料庫 無損分解和保持依賴的判斷
批評一下自己,昨天又貪玩了,啥都沒乾。於是今天好好努力,將昨天的那份補上。這幾天做了幾份資料庫方面的試題,其他的沒什麼好說的,在無損分解這裡每次都不知道怎麼做。主要原因是書上對這一塊講解很少,我基本上沒怎麼注意就略過了。但是這幾天做了幾套試題,幾乎每套都有關於無損分解的試題,讓我不得不重視了起來。首...