数据库复习之规范化理论应用(第八次上机内容)
聲明:本文為作者復習數(shù)據(jù)庫課程時簡單記錄的筆記,如有錯誤之處,敬請指出,謝謝。
?
一、理論基礎
1.無損連接性(Lossless Join):設關系模式R(U,F)被分解為若干個關系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…Un,且不存在UnUj式,Fi為F在Uj上的投影,如果R與R1,R2,…,Rn自然連接的結果相等,則稱關系模式R的分解具有無損連接性。
(上面別看了,看下面!)
簡單來說,就是如果對分解后的新關系進行自然連接得到的元組的集合與原關系完全一致,則稱為無損連接。
2.函數(shù)依賴保持性(Preserve Dependency):設關系模式R(U,F)被分解為若干個關系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…UN,且不存在UNUj式,Fi為F在Uj上的投影;如果F所蘊含的任意一個函數(shù)依賴一定也由(F1 U F2 …U Fn)所蘊含,則稱關系模式R的分解具有函數(shù)依賴保持性。
(概念復雜就別看了,腦殼疼)
簡單來說,如果F上的每一個函數(shù)依賴都在其分解后的某一個關系上成立,則這個分解是保持函數(shù)依賴的(注意:這是一個充分條件)。
3.規(guī)范化過程既要具有無損連接性,又要具有函數(shù)依賴保持性。(僅偏一方都會有問題),前者可以保證不丟失信息,后者可以減輕或解決各種異常情況。
4.非規(guī)范化技術:有時候可以適當降低甚至拋棄關系模式的范式,提高數(shù)據(jù)庫運行效率。比如經(jīng)常從兩個表中查詢數(shù)據(jù),為了避免頻繁連接,可以適當數(shù)據(jù)冗余。
(1)表分割:水平分割,垂直分割。
(2)非規(guī)范化設計的主要優(yōu)點
- 減少了查詢操作所需的連接
- 減少了外部鍵和索引的數(shù)量
- 可以預先進行統(tǒng)計計算,提高了查詢時的響應速度
(3)非規(guī)范化存在的主要問題
- 增加了數(shù)據(jù)冗余
- 影響數(shù)據(jù)庫的完整性
- 降低了數(shù)據(jù)更新的速度
- 增加了存儲表所占用的物理空間
5.閉包概念
- 屬性集的閉包:給定關系R(U,F), 對F,F+中所有X→A的A的集合稱為X的閉包,記為X+。
- 函數(shù)依賴的閉包:?若F為關系模式R(U)的函數(shù)依賴集,我們把F以及所有被F邏輯蘊涵的函數(shù)依賴的集合稱為F的閉包,記為F+。
規(guī)定:若X為U的子集,X→Φ 屬于F+。
屬性集閉包的用途:
- 判斷α是否為超碼,通過計算α+(α在F下的閉包),看α+ 是否包含了R中的所有屬性。若是,則α為R的超碼。
- 通過檢驗是否β∈α+,來驗證函數(shù)依賴是否成立。也就是說,用屬性閉包計算α+,看它是否包含β。
二、例題講述(第八次上機)
基本概念講述:http://www.cnblogs.com/AlvinZH/p/6856298.html
解題方法要點一:判定函數(shù)依賴X→Y是否能由F導出的問題,可轉(zhuǎn)化為求X+并判定Y是否是X+子集的問題。(求F閉包的問題可轉(zhuǎn)化為求屬性集閉包的問題)
解題方法要點二:求屬性集的閉包算法:
解題方法要點三:函數(shù)依賴推理規(guī)則:?
例1.已知某個關系,具有屬性:A,B,C,D,E,F。假設該關系有函數(shù)依賴F={AB->C, BC->AD, D->E,CF->B},?判斷AB->D,D->A是否蘊含于這些函數(shù)依賴中。
解答:前者轉(zhuǎn)化為求屬性集AB的閉包:{A,B,C,D,E},D是其閉包的子集,所以前者蘊含于這些函數(shù)依賴中。后者求屬性集D的閉包:{D,E},A不是其閉包的子集,所以后者不蘊含其中。
例2.已知關系模式R(U,F),U={A,B,C,D,E,G},F={AB->C, C->A,BC->D, ACD->B, D->EG, BE->C, CG->BD, CE->AG},判斷BD->AC是否屬于F+。
解答:本題換了一種問法,道理是一樣:判斷BD->AC成不成立。轉(zhuǎn)化為求BD的閉包:{B,D,E,G,C,A},AC是其子集,所以屬于。
例3.給定關系R(A1,A2,A3,A4)上的函數(shù)依賴集F={A1→A2,A3→A2,A2→A3,A2→A4},R的候選關鍵字為__A__。
A. A1 B. A1A3 C. A1A3A4 D. A1A2A3
解答:求候選關鍵字,先求哪個屬性集的閉包包含所有屬性(超碼)。A1的閉包:{A1,A2,A3,A4},符合要求。
例4.設有關系模式R(職工名,項目名,工資,部門名,部門經(jīng)理)。如果規(guī)定,每個職工可以參加多個項目,各領一份工資(一人一項目同時確定工資);每個項目只屬于一個部門管理;每個部門只有一個經(jīng)理。
①試寫出關系模式R的基本函數(shù)依賴和關鍵碼.
基本函數(shù)依賴:(職工名,項目名)→工資,項目名→部門名,部門名→部門經(jīng)理
關鍵碼:(職工名,項目名)
②說明R不是2NF的理由,并把R分解成2NF.
2NF特點:不存在非主屬性對候選碼的部分函數(shù)依賴。
(畫圖好理解qwq)
這里(職工名,項目名) P→部門名,存在非主屬性對候選碼的部分函數(shù)依賴,所以不屬于2NF。
分解為2NF:R1(職工名,項目名,工資)、R2(項目名,部門名,部門經(jīng)理)。
③進而把R分解成3NF,并說明理由。
分析:3NF特點:非主屬性對候選碼沒有部分函數(shù)依賴,也沒有傳遞依賴。很明顯這里有傳遞依賴:項目名 t→ 部門經(jīng)理,需要進一步拆分。拆掉的方法是:A→ B,B→ C,可拆成(A,B)、(B,C)。
分解:R1(職工名,項目名,工資)、R2(項目名,部門名),R3(部門名,部門經(jīng)理)。
理由:上述三個表的碼分別為(職工名,項目名)、(項目名)、(部門名),每一個非主屬性對候選碼沒有部分函數(shù)依賴,也沒有傳遞函數(shù)依賴。
例5.設有關系模式R(A,B,C,D,E,F),其函數(shù)依賴集F={E->D, C->B, CE->F, B->A}。
①指出R的主鍵并說明原因。
分析:求主鍵,先求哪個屬性集的閉包包含了所有屬性。
解答:主鍵為CE,因為屬性集CE的閉包為{C,E,D,B,F,A},包含了所有屬性。
②R最高屬于第幾范式。
分析:助教說一般都是第一范式,當然需要簡單分析一下,方便第三題:)
解答:最高屬于第一范式,因為存在非主屬性對候選碼的的部分函數(shù)依賴:C->B。
③分解R為3NF。
分析:這個畫圖真的好理解,先分解為第二范式,然后再分解為第三范式。
第二范式:(E,D)、(C,B,A)、(C,E,F)(消除非主屬性部分函數(shù)依賴)
第三范式:(E,D)、(CB)、(BA)、(C,E,F)(消除非主屬性傳遞函數(shù)依賴)
解題要點四:判斷一個模式分解是否具有無損連接性:
1.無損連接定理:關系模式R(U,F)的一個分解,ρ={R1<U1,F1>,R2<U2,F2>}具有無損連接的充分必要條件是:U1∩U2→U1-U2?€F+?或U1∩U2→U2-U1€F+。
簡單來說,就是
注:上述定理只能判斷分成兩個關系的判定,如果分成三個及以上的話,怎么辦呢(考試不會考這么難的,放心),書上197頁有表格法,深入學習:http://blog.csdn.net/qq379666774/article/details/16969493。
2.推論(充分條件):如果R1∩R2是R1或R2的超碼(U部分依賴于K,則稱K為超碼),則R上的分解(R1,R2)是無損分解。
注:注意這里是充分條件,當所有的約束都是函數(shù)依賴時它才是必要條件(例如多值依賴就是一種非函數(shù)依賴的約束),不過這已經(jīng)足夠了,常用這個。
例6.R(A,B,C,D,E),R的函數(shù)依賴集F={A->BC,CB->E,B->D,E->A}. 判斷R1(A,B,C),R2(A,D,E)是否是無損連接。
解答:R1∩R2=(A),A的閉包為{A,B,C,E,D},發(fā)現(xiàn)A是R1的超碼,甚至是主鍵,所以是無損連接。(注意是充分條件)
解題要點五:判斷一個模式分解是否有函數(shù)依賴保持性:
1.充分條件:如果F上的每一個函數(shù)依賴都在其分解后的某一個關系上成立,則這個分解是保持依賴的。
2.如果上述判斷失敗,并不能斷言分解不是保持依賴的,因為只是充分條件,還要使用下面的通用方法來做進一步判斷。
算法:對F上的每一個α→β使用下面的過程:
result:=α; while(result cahnges) dofor each 分解后的Rit=(result∩Ri)+ ∩Riresult=result∪t其中的(result∩Ri)+屬性閉包是在函數(shù)依賴集F下計算出來的。如果result中包含了β的所有屬性,則函數(shù)依賴α→β成立。分解是保持依賴的當且僅當上述過程中F的所有依賴都被保持。
例7.設關系模式R<U, F>,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},則分解ρ={R1(ABCE),R2(CD)}滿足 ___A__。
A.具有無損連接性、保持函數(shù)依賴
B.不具有無損連接性、保持函數(shù)依賴
C.具有無損連接性、不保持函數(shù)依賴
D.不具有無損連接性、不保持函數(shù)依賴
解答:先判斷無損連接。R1∩R2={C},計算C+={C,D},可見C是R2的超碼,該分解是一個無損分解。
再判斷保持依賴。A→BC,BC→E, E→A都在R1上成立(也就是說每一個函數(shù)依賴左右兩邊的屬性都在R1中),C→D在R2上成立,因此給分解是保持依賴的。(利用充分條件就可以判斷)。
例8.給定關系模式R<U, F>,U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候選關鍵字為_(1)D_,則分解ρ={R1(ABCE),R2(CD)}滿足_(2)D_ 。
(1)A.ABD ? ?B.ABE ? ?C.ACD ? ?D.CD
(2) A.具有無損連接性、保持函數(shù)依賴
? B.不具有無損連接性、保持函數(shù)依賴
? C.具有無損連接性、不保持函數(shù)依賴
? D.不具有無損連接性、不保持函數(shù)依賴
解答:第一問,計算各個選項的閉包。
(ABD)+ = {A,B,D,E}
(ABE)+ = {A,B,E}
(ACD)+ = {A,B,C,D,E}
(CD)+ = {A,B,C,D,E}
選D。
第二問,先判斷無損連接。R1∩R2={C},計算C+={C}。C既不是R1也不是R2的超碼,但這不能判斷該分解不具有無損分解性,因為這個判斷方法是充分條件。我們用定理來判斷:
U1?∩ U2={C},其閉包為{C}
U1-U2={ABE}
U2-U1={D}
所以U1∩U2→U1-U2?€F+ 和U1∩U2→U2-U1€F+都不成立,即不具有無損連接性。
再判斷保持依賴:
B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,但是還需做進一步判斷。
我們對D→A應用算法:
result=D
對R1,result∩R1=ф,t=ф,result=D
再對R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D,result=D
一個循環(huán)后result未發(fā)生變化,因此最后result=D,并未包含A,所以D→A未被保持,所以該分解不是保持依賴的。
選D。
?
作者:?AlvinZH
出處:?http://www.cnblogs.com/AlvinZH/
本文版權歸作者AlvinZH和博客園所有,歡迎轉(zhuǎn)載和商用,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
轉(zhuǎn)載于:https://www.cnblogs.com/AlvinZH/p/6856432.html
總結
以上是生活随笔為你收集整理的数据库复习之规范化理论应用(第八次上机内容)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue2.0脚手架
- 下一篇: java导入、导出Excel文件