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