關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)課件_第1頁(yè)
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)課件_第2頁(yè)
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)課件_第3頁(yè)
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)課件_第4頁(yè)
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩157頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)2022/12/101a第4章關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)2022/12/101a本章重要概念(1)關(guān)系模式的冗余和異常問(wèn)題。(2)FD的定義、邏輯蘊(yùn)涵、閉包、推理規(guī)則、與關(guān)鍵碼的聯(lián)系;平凡的FD;屬性集的閉包;推理規(guī)則的正確性和完備性;FD集的等價(jià);最小依賴集。(3)無(wú)損分解的定義、性質(zhì)、測(cè)試;保持依賴集的分解。(4)關(guān)系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。2022/12/102a本章重要概念(1)關(guān)系模式的冗余和異常問(wèn)題。2022/前言關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)是指面對(duì)一個(gè)現(xiàn)實(shí)問(wèn)題,如何選擇一個(gè)比較好的關(guān)系模式集合。規(guī)范化設(shè)計(jì)理論主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)依賴、范式和模式設(shè)計(jì)方法。其中數(shù)據(jù)依賴起著核心的作用。數(shù)據(jù)依賴研究數(shù)據(jù)之間的聯(lián)系,范式是關(guān)系模式的標(biāo)準(zhǔn),模式設(shè)計(jì)方法是自動(dòng)化設(shè)計(jì)的基礎(chǔ)。規(guī)范化設(shè)計(jì)理論對(duì)關(guān)系數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)起著重要的作用。2022/12/103a前言關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)是指面對(duì)一個(gè)現(xiàn)實(shí)問(wèn)題,如何選擇4.1.1關(guān)系模型的外延和內(nèi)涵外延就是通常所說(shuō)的關(guān)系、表或當(dāng)前值,它的基本性質(zhì)已在前面介紹過(guò)。由于用戶經(jīng)常對(duì)關(guān)系進(jìn)行插入、刪除和修改操作,因此外延是與時(shí)間有關(guān)的,隨著時(shí)間的推移在不斷變化。內(nèi)涵是與時(shí)間獨(dú)立的,是對(duì)數(shù)據(jù)的定義以及數(shù)據(jù)完整性約束的定義。對(duì)數(shù)據(jù)的定義包括對(duì)關(guān)系、屬性、域的定義和說(shuō)明。對(duì)數(shù)據(jù)完整性約束的定義涉及面較廣,主要包括以下幾個(gè)方面:靜態(tài)約束,涉及到數(shù)據(jù)之間聯(lián)系(稱為“數(shù)據(jù)依賴,datadependences)、主鍵和值域的設(shè)計(jì)。動(dòng)態(tài)約束,定義各種操作(插入、刪除、修改)對(duì)關(guān)系值的影響。2022/12/104a4.1.1關(guān)系模型的外延和內(nèi)涵外延就是通常所說(shuō)的關(guān)系、表4.1.2關(guān)系模式的冗余和異常問(wèn)題(一)例4.1TNAMEADDRESSC#CNAMEt1a1c1n1t1a1c2n2t1a1c3n3t2a2c4n4t2a2c5n2t3a3c6n4圖4.1關(guān)系模式R的實(shí)例

2022/12/105a4.1.2關(guān)系模式的冗余和異常問(wèn)題(一)例4.1TNA4.1.2關(guān)系模式的冗余和異常問(wèn)題(二)數(shù)據(jù)冗余如果一個(gè)教師教幾門(mén)課程,那么這個(gè)教師的地址就要重復(fù)幾次存儲(chǔ)。操作異常由于數(shù)據(jù)的冗余,在對(duì)數(shù)據(jù)操作時(shí)會(huì)引起各種異常:修改異常。例如教師t1教三門(mén)課程,在關(guān)系中就會(huì)有三個(gè)元組。如果他的地址變了,這三個(gè)元組中的地址都要改變。若有一個(gè)元組中的地址未更改,就會(huì)造成這個(gè)教師的地址不惟一,產(chǎn)生不一致現(xiàn)象。插入異常。如果一個(gè)教師剛調(diào)來(lái),尚未分派教學(xué)任務(wù),那么要將教師的姓名和地址存儲(chǔ)到關(guān)系中去時(shí),在屬性C#和CNAME上就沒(méi)有值(空值)。在數(shù)據(jù)庫(kù)技術(shù)中空值的語(yǔ)義是非常復(fù)雜的,對(duì)帶空值元組的檢索和操作也十分麻煩。刪除異常。如果在圖4.1中要取消教師t3的教學(xué)任務(wù),那么就要把這個(gè)教師的元組刪去,同時(shí)也把t3的地址信息從表中刪去了。這是一種不合適的現(xiàn)象。2022/12/106a4.1.2關(guān)系模式的冗余和異常問(wèn)題(二)數(shù)據(jù)冗余20224.1.2關(guān)系模式的冗余和異常問(wèn)題(三)TNAMEADDRESSTNAMEC#CNAMEt1a1t1c1n1t2a2t1c2n2t3a3t1c3n3

t2c4n4

t2c5n2

t3c6n4圖4.2關(guān)系模式分解的實(shí)例

(a)關(guān)系模式R1的實(shí)例

(b)關(guān)系模式R2的實(shí)例

2022/12/107a4.1.2關(guān)系模式的冗余和異常問(wèn)題(三)TNAMEADD4.2.1函數(shù)依賴的定義(一)定義4.1設(shè)有關(guān)系模式R(U),X和Y是屬性集U的子集,函數(shù)依賴(FunctionalDependency,簡(jiǎn)記為FD)是形為X→Y的一個(gè)命題,只要r是R的當(dāng)前關(guān)系,對(duì)r中任意兩個(gè)元組t和s,都有t[X]=s[X]蘊(yùn)涵t[Y]=s[Y],那么稱FDX→Y在關(guān)系模式R(U)中成立。2022/12/108a4.2.1函數(shù)依賴的定義(一)定義4.1設(shè)有關(guān)系模4.2.1函數(shù)依賴的定義(二)例4.2ABCDABCDa1b1c1d1a1b1c1d1a1b1c2d2a1b2c2d2a2b2c3d3a2b2c3d3a3b1c4d4a3b2c4d4圖4.3關(guān)系模式R的兩個(gè)關(guān)系

2022/12/109a4.2.1函數(shù)依賴的定義(二)例4.2ABCDABCD4.2.1函數(shù)依賴的定義(三)

例4.3

有一個(gè)關(guān)于學(xué)生選課、教師任課的關(guān)系模式:

R(S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE) 屬性分別表示學(xué)生學(xué)號(hào)、姓名、選修課程的課程號(hào)、成績(jī)、課程名、任課教師姓名和年齡等意義。

如果規(guī)定,每個(gè)學(xué)號(hào)只能有一個(gè)學(xué)生姓名,每個(gè)課程號(hào)只能決定一門(mén)課程,那么可寫(xiě)成下列FD形式:

S#→SNAME C#→CNAME 每個(gè)學(xué)生每學(xué)一門(mén)課程,有一個(gè)成績(jī),那么可寫(xiě)出下列FD:

(S#,C#)→GRADE 還可以寫(xiě)出其他一些FD:

C#→(CNAME,TNAME,TAGE)TNAME→TAGE2022/12/1010a4.2.1函數(shù)依賴的定義(三) 例4.3有一個(gè)關(guān)于4.2.2FD的邏輯蘊(yùn)涵定義4.2設(shè)F是在關(guān)系模式R上成立的函數(shù)依賴的集合,X→Y是一個(gè)函數(shù)依賴。如果對(duì)于R的每個(gè)滿足F的關(guān)系r也滿足X→Y,那么稱F邏輯蘊(yùn)涵X→Y,記為F?X→Y。定義4.3設(shè)F是函數(shù)依賴集,被F邏輯蘊(yùn)涵的函數(shù)依賴全體構(gòu)成的集合,稱為函數(shù)依賴集F的閉包(closure),記為F+。即F+={X→Y|記為F?X→Y。}2022/12/1011a4.2.2FD的邏輯蘊(yùn)涵定義4.2設(shè)F是在關(guān)系模式R4.2.3FD的推理規(guī)則(一)設(shè)U是關(guān)系模式R的屬性集,F(xiàn)是R上成立的只涉及到U中屬性的函數(shù)依賴集。FD的推理規(guī)則有以下三條:A1(自反性,Reflexivity):若YXU,則X→Y在R上成立。A2(增廣性,Augmentation):若X→Y在R上成立,且ZU,則XZ→YZ在R上成立。A3(傳遞性,Transitivity):若X→Y和Y→Z在R上成立,則X→Z在R上成立。2022/12/1012a4.2.3FD的推理規(guī)則(一)設(shè)U是關(guān)系模式R的屬性集,4.2.3FD的推理規(guī)則(二)定理4.1FD推理規(guī)則A1、A2和A3是正確的。也就是,如果X→Y是從F用推理規(guī)則導(dǎo)出,那么X→Y在F+中。定理4.2FD的其他五條推理規(guī)則:(1)A4(合并性,Union):{X→Y,X→Z}?X→YZ。(2)A5(分解性,Decomposition):{X→Y,ZY}X→Z。(3)A6(偽傳遞性):{X→Y,WY→Z}?WX→Z。(4)A7(復(fù)合性,Composition):{X→Y,W→Z}XW→YZ。(5)A8{X→Y,W→Z}?X∪(W-Y)→YZ。2022/12/1013a4.2.3FD的推理規(guī)則(二)定理4.1FD推理規(guī)則4.2.3FD的推理規(guī)則(三)例4.5已知關(guān)系模式R(ABC),F(xiàn)={A→B,B→C},求F+。 根據(jù)FD的推理規(guī)則,可推出F的F+有43個(gè)FD。 例如,據(jù)規(guī)則A1可推出A→φ(φ表示空屬性集),A→A,…。據(jù)已知的A→B及規(guī)則A2可推出AC→BC,AB→B,A→AB,…。據(jù)已知條件及規(guī)則A3可推出A→C等。 有興趣的同學(xué)可推出這43個(gè)FD。2022/12/1014a4.2.3FD的推理規(guī)則(三)例4.5已知關(guān)系模式R4.2.3FD的推理規(guī)則(四)定義4.4對(duì)于FDX→Y,如果YX,那么稱X→Y是一個(gè)“平凡的FD”,否則稱為“非平凡的FD”。定理4.3如果A1…An是關(guān)系模式R的屬性集,那么X→A1…An成立的充分必要條件是X→Ai(i=1,…,n)成立。2022/12/1015a4.2.3FD的推理規(guī)則(四)定義4.4對(duì)于FD4.2.4FD和關(guān)鍵碼的聯(lián)系定義4.5

設(shè)關(guān)系模式R的屬性集是U,X是U的一個(gè)子集。如果X→U在R上成立,那么稱X是R的一個(gè)超鍵。如果X→U在R上成立,但對(duì)于X的任一真子集X1都有X1→U不成立,那么稱X是R上的一個(gè)候選鍵。本章的鍵都是指候選鍵。

例4.6

在學(xué)生選課、教師任課的關(guān)系模式中: R(S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE) 如果規(guī)定:每個(gè)學(xué)生每學(xué)一門(mén)課只有一個(gè)成績(jī);每個(gè)學(xué)生只有一個(gè)姓名;每個(gè)課程號(hào)只有一個(gè)課程名;每門(mén)課程只有一個(gè)任課教師。 根據(jù)這些規(guī)則,可以知道(S#,C#)能函數(shù)決定R的全部屬性,并且是一個(gè)候選鍵。雖然(S#,SNAME,C#,TNAME)也能函數(shù)決定R的全部屬性,但相比之下,只能說(shuō)是一個(gè)超鍵,而不能說(shuō)是候選鍵,因?yàn)槠渲泻卸嘤鄬傩浴?/p>

2022/12/1016a4.2.4FD和關(guān)鍵碼的聯(lián)系定義4.5設(shè)關(guān)系模式R的4.2.5屬性集的閉包定義4.6設(shè)F是屬性集U上的FD集,X是U的子集,那么(相對(duì)于F)屬性集X的閉包用X+表示,它是一個(gè)從F集使用FD推理規(guī)則推出的所有滿足X→A的屬性A的集合:X+={屬性A|X→A在F+中}定理4.4X→Y能用FD推理規(guī)則推出的充分必要條件是YX+。例4.7屬性集U為ABCD,F(xiàn)D集為{A→B,B→C,D→B}。則用上述算法,可求出A+=ABC,(AD)+=ABCD,(BD)+=BCD,等等。2022/12/1017a4.2.5屬性集的閉包定義4.6設(shè)F是屬性集U上的4.2.5FD推理規(guī)則的完備性推理規(guī)則的正確性是指“從FD集F使用推理規(guī)則集推出的FD必定在F+中”,完備性是指“F+中的FD都能從F集使用推理規(guī)則集導(dǎo)出”。也就是正確性保證了推出的所有FD是正確的,完備性保證了可以推出所有被蘊(yùn)涵的FD。這就保證了推導(dǎo)的有效性和可靠性。定理4.5FD推理規(guī)則{A1,A2,A3}是完備的。2022/12/1018a4.2.5FD推理規(guī)則的完備性推理規(guī)則的正確性是指“從F4.2.6FD集的最小依賴集(一)定義4.7如果關(guān)系模式R(U)上的兩個(gè)函數(shù)依賴集F和G,有F+=G+,則稱F和G是等價(jià)的函數(shù)依賴集。定義4.8設(shè)F是屬性集U上的FD集。如果Fmin是F的一個(gè)最小依賴集,那么Fmin應(yīng)滿足下列四個(gè)條件: ⑴F+min=F+; ⑵每個(gè)FD的右邊都是單屬性; ⑶Fmin中沒(méi)有冗余的FD(即F中不存在這樣的函數(shù)依賴X→Y,使得F與F-{X→Y}等價(jià)); ⑷每個(gè)FD的左邊沒(méi)有冗余的屬性(即F中不存在這樣的函數(shù)依賴X→Y,X有真子集W使得F-{X→Y}∪{W→Y}與F等價(jià))。2022/12/1019a4.2.6FD集的最小依賴集(一)定義4.7如果關(guān)系4.2.6FD集的最小依賴集(二) 例4.8設(shè)F是關(guān)系模式R(ABC)的FD集,F(xiàn)={A→BC,B→C,A→B,AB→C},試求Fmin。

①先把F中的FD寫(xiě)成右邊是單屬性形式: F={A→B,A→C,B→C,A→B,AB→C} 顯然多了一個(gè)A→B,可刪去。得F={A→B,A→C,B→C,AB→C} ②F中A→C可從A→B和B→C推出,因此A→C是冗余的,可刪去。得F={A→B,B→C,AB→C} ③F中AB→C可從A→B和B→C推出,因此AB→C也可刪去。最后得F={A→B,B→C},即所求的Fmin。2022/12/1020a4.2.6FD集的最小依賴集(二) 例4.8設(shè)F是關(guān)4.3關(guān)系模式的分解

4.3.1模式分解問(wèn)題(一)定義4.9設(shè)有關(guān)系模式R(U),屬性集為U,R1、…、Rk都是U的子集,并且有R1∪R2∪…∪Rk=U。關(guān)系模式R1、…、Rk的集合用ρ表示,ρ={R1,…,Rk}。用ρ代替R的過(guò)程稱為關(guān)系模式的分解。這里ρ稱為R的一個(gè)分解,也稱為數(shù)據(jù)庫(kù)模式。2022/12/1021a4.3關(guān)系模式的分解

4.3.1模式分解問(wèn)題(一)定義4.3.1模式分解問(wèn)題(二)圖4.5模式分解示意圖

2022/12/1022a4.3.1模式分解問(wèn)題(二)圖4.5模式分解示意圖4.3.2無(wú)損分解(一)例4.9rCC4343rABCr1AB2A111111112112圖4.6未丟失信息的分解

(b)(c)(a)

rABCr1ABr2AC

r1r2AB1141114111231213111212(a)(b)(c)(d)圖4.7丟失信息的分解

2022/12/1023a4.3.2無(wú)損分解(一)例4.9rCC4343rABCr4.3.2無(wú)損分解(二)定義4.10設(shè)R是一個(gè)關(guān)系模式,F(xiàn)是R上的一個(gè)FD集。R分解成數(shù)據(jù)庫(kù)模式ρ={R1,…,Rk

}。如果對(duì)R中滿足F的每一個(gè)關(guān)系r,都有r=πR1(r)?πR2(r)?…?πRk(r)那么稱分解ρ相對(duì)于F是“無(wú)損聯(lián)接分解”(losslessjoindecomposition),簡(jiǎn)稱為“無(wú)損分解”,否則稱為“損失分解”(lossydecomposition)。2022/12/1024a4.3.2無(wú)損分解(二)定義4.10設(shè)R是一個(gè)關(guān)系模4.3.2無(wú)損分解(三)定理4.6設(shè)ρ={R1,…,Rk

}是關(guān)系模式R的一個(gè)分解,r是R的任一關(guān)系,ri=πRi(r)(1≤i≤k),那么有下列性質(zhì):rmρ(r);若s=mρ(r),則πRi(s)=ri;mρ(mρ(r))=mρ(r),這個(gè)性質(zhì)稱為冪等性(

Idempotent)。2022/12/1025a4.3.2無(wú)損分解(三)定理4.6設(shè)ρ={R1,…4.3.2無(wú)損分解(四)Rρ={R1,R2,…,Rk}rr1,r2,…,rkss1,s2,…,skπππ圖中:ri=πRi(r)(1≤i≤k)si=πRi(r)(1≤i≤k)據(jù)性質(zhì)1.有rmρ(r)據(jù)性質(zhì)2.有si=ri(1≤i≤k)圖4.8r的投影連接變換示意圖

2022/12/1026a4.3.2無(wú)損分解(四)Rρ={R1,R2,…,Rk}r4.3.2無(wú)損分解(五)圖4.9泛關(guān)系假設(shè)下的示意圖

圖4.9泛關(guān)系假設(shè)時(shí)的示意圖

2022/12/1027a4.3.2無(wú)損分解(五)圖4.9泛關(guān)系假設(shè)下的示意圖4.3.2無(wú)損分解(六)例4.10設(shè)關(guān)系模式R(ABC)分解成ρ={AB,BC}。(a)和(b)分別是模式AB和BC上的值r1和r2,(c)是r1?r2的值。顯然πBC(r1?r2)≠r2。這里r2中元組(b2c2)就是一個(gè)懸掛元組,由于它的存在,使得r1和r2不存在泛關(guān)系r。r1ABr2BCABCa1b1a1b1c1bc1b12c2(a)關(guān)系r1(b)關(guān)系r2rr12(c)rr122022/12/1028a4.3.2無(wú)損分解(六)例4.10設(shè)關(guān)系模式R(AB4.3.3無(wú)損分解的測(cè)試方法(一) 算法4.3無(wú)損分解的測(cè)試構(gòu)造一張k行n列的表格,每列對(duì)應(yīng)一個(gè)屬性Aj(1≤j≤n),每行對(duì)應(yīng)一個(gè)模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列處填上符號(hào)aj,否則填上bij。把表格看成模式R的一個(gè)關(guān)系,反復(fù)檢查F中每個(gè)FD在表格中是否成立,若不成立,則修改表格中的值。修改方法如下:對(duì)于F中一個(gè)FDX→Y,如果表格中有兩行在X值上相等,在Y值上不相等,那么把這兩行在Y值上也改成相等的值。如果Y值中有一個(gè)是aj,那么另一個(gè)也改成aj;如果沒(méi)有aj,那么用其中一個(gè)bij替換另一個(gè)值(盡量把下標(biāo)ij改成較小的數(shù))。一直到表格不能修改為止。(這個(gè)過(guò)程稱為chase過(guò)程)若修改的最后一張表格中有一行是全a,即a1a2…an,那么稱ρ相對(duì)于F是無(wú)損分解,否則稱損失分解。2022/12/1029a4.3.3無(wú)損分解的測(cè)試方法(一) 算法4.3無(wú)損4.3.3無(wú)損分解的測(cè)試方法(二)a4a3b32b31CDb24a3a2b21BCb14b13a2a1ABDCBAa4a3b32b31CDa4a3a2a1BCb14b13a2a1ABDCBA圖4.12算法4.3的運(yùn)用示意圖(一)

(a)初始表格

(a)修改后的表格

a4a3b32b31CDb24a3a2b21BCb14b13a2a1ABDCBAa4a3b32b31CDa4a3a2b1BCb14b13a2b1ABDCBA(a)初始表格

(a)修改后的表格

圖4.13算法4.3的運(yùn)用示意圖(二)

2022/12/1030a4.3.3無(wú)損分解的測(cè)試方法(二)a4a3b32b31C4.3.3無(wú)損分解的測(cè)試方法(三)定理4.7設(shè)ρ={R1,R2

}是關(guān)系模式R的一個(gè)分解,F(xiàn)是R上成立的FD集,那么分解ρ相對(duì)于F是無(wú)損分解的充分必要條件是(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)。定理4.8如果FDX→Y在模式R上成立,且X∩Y=φ,那么R分解成ρ={R-Y,XY}是無(wú)損分解。2022/12/1031a4.3.3無(wú)損分解的測(cè)試方法(三)定理4.7設(shè)ρ={4.3.4保持函數(shù)依賴的分解(一)定義4.11設(shè)F是屬性集U上的FD集,Z是U的子集,F(xiàn)在Z上的投影用πZ(F)表示,定義為πZ(F)={X→Y|X→Y∈F+,且XYZ}定義4.12設(shè)ρ={R1,…,Rk}是R的一個(gè)分解,F(xiàn)是R上的FD集,如果有∪πRi(F)?F,那么稱分解ρ保持函數(shù)依賴集F。

2022/12/1032a4.3.4保持函數(shù)依賴的分解(一)定義4.11設(shè)F是4.3.4保持函數(shù)依賴的分解(二)WNOWSWNOWGWNOWSWGW18級(jí)W12000W18級(jí)2000W26級(jí)W21600W26級(jí)1600W36級(jí)W31400W36級(jí)1400例4.12

(c)rr12(a)關(guān)系r1(b)關(guān)系r22022/12/1033a4.3.4保持函數(shù)依賴的分解(二)WNOWSWNOWGW4.3.5模式分解與模式等價(jià)問(wèn)題(一) 本節(jié)討論的關(guān)系模式分解的兩個(gè)特性實(shí)際上涉及到兩個(gè)數(shù)據(jù)庫(kù)模式的等價(jià)問(wèn)題,這種等價(jià)包括數(shù)據(jù)等價(jià)和依賴等價(jià)兩個(gè)方面。數(shù)據(jù)等價(jià)是指兩個(gè)數(shù)據(jù)庫(kù)實(shí)例應(yīng)表示同樣的信息內(nèi)容,用“無(wú)損分解”衡量。如果是無(wú)損分解,那么對(duì)泛關(guān)系反復(fù)的投影和聯(lián)接都不會(huì)丟失信息。依賴等價(jià)是指兩個(gè)數(shù)據(jù)庫(kù)模式應(yīng)有相同的依賴集閉包。在依賴集閉包相等情況下,數(shù)據(jù)的語(yǔ)義是不會(huì)出差錯(cuò)的。違反數(shù)據(jù)等價(jià)或依賴等價(jià)的分解很難說(shuō)是一個(gè)好的模式設(shè)計(jì)。2022/12/1034a4.3.5模式分解與模式等價(jià)問(wèn)題(一) 本節(jié)討論的關(guān)系模4.3.5模式分解與模式等價(jià)問(wèn)題(二)

例4.13設(shè)關(guān)系模式R(ABC),ρ={AB,AC}是R的一個(gè)分解。試分析分別在F1={A→B},F(xiàn)2={A→C,B→C},F(xiàn)3={B→A},F(xiàn)4={C→B,B→A}情況下,ρ是否具有無(wú)損分解和保持FD的分解特性。相對(duì)于F1={A→B},分解ρ是無(wú)損分解且保持FD的分解。相對(duì)于F2

={A→C,B→C},分解ρ是無(wú)損分解,但不保持FD集。因?yàn)锽→C丟失了。相對(duì)于F3

={B→A},分解ρ是損失分解但保持FD集的分解。相對(duì)于F4

={C→B,B→A},分解ρ是損失分解且不保持FD集的分解(丟失了C→B)

2022/12/1035a4.3.5模式分解與模式等價(jià)問(wèn)題(二) 例4.13設(shè)關(guān)4.4關(guān)系模式的范式關(guān)系模式的好與壞,用什么標(biāo)準(zhǔn)衡量?這個(gè)標(biāo)準(zhǔn)就是模式的范式(NormalForms,簡(jiǎn)記為NF)。范式的種類與數(shù)據(jù)依賴有著直接的聯(lián)系,基于FD的范式有1NF、2NF、3NF、BCNF等多種。在不提及FD時(shí),關(guān)系中是不可能有冗余的問(wèn)題,但是當(dāng)存在FD時(shí),關(guān)系中就有可能存在數(shù)據(jù)冗余問(wèn)題。1NF是關(guān)系模式的基礎(chǔ);2NF已成為歷史,一般不再提及;在數(shù)據(jù)庫(kù)設(shè)計(jì)中最常用的是3NF和BCNF。為了敘述的方便,我們還是從1NF、2NF、3NF、BCNF順序來(lái)介紹。2022/12/1036a4.4關(guān)系模式的范式關(guān)系模式的好與壞,用什么標(biāo)準(zhǔn)衡量?這4.4.1第一范式(1NF)定義4.13如果關(guān)系模式R的每個(gè)關(guān)系r的屬性值都是不可分的原子值,那么稱R是第一范式(firstnormalform,簡(jiǎn)記為1NF)的模式。滿足1NF的關(guān)系稱為規(guī)范化的關(guān)系,否則稱為非規(guī)范化的關(guān)系。關(guān)系數(shù)據(jù)庫(kù)研究的關(guān)系都是規(guī)范化的關(guān)系。例如關(guān)系模式R(NAME,ADDRESS,PHONE),如果一個(gè)人有兩個(gè)電話號(hào)碼(PHONE),那么在關(guān)系中至少要出現(xiàn)兩個(gè)元組,以便存儲(chǔ)這兩個(gè)號(hào)碼。1NF是關(guān)系模式應(yīng)具備的最起碼的條件。2022/12/1037a4.4.1第一范式(1NF)定義4.13如果關(guān)系模式滿足第一范式的(不好的)關(guān)系模式的例子

例4:設(shè)有一關(guān)系R(S#,C#,G,TN,D),其中(S#)為學(xué)號(hào),C#為課程號(hào),G為成績(jī),TN為任課教師姓名,D為教師所在系名,這些數(shù)據(jù)具有下列語(yǔ)義:(1)學(xué)號(hào)是一個(gè)學(xué)生的標(biāo)識(shí),課程號(hào)是一門(mén)課程的標(biāo)識(shí)。(2)一位學(xué)生所修的每門(mén)課程都有一個(gè)成績(jī)。(3)每門(mén)課程只有一位任課教師,但一位教師可以教多門(mén)課。(4)教師中沒(méi)有重名,每位教師只屬于一個(gè)系。2022/12/1038a滿足第一范式的(不好的)關(guān)系模式的例子例4:設(shè)有下面是一個(gè)具體實(shí)例:S#C#GTNDs1c1g1t1d1s1c2g2t2d2s2c1g3t1d1s2c2g4t2d2s3c2g5t2d2s3c3g6t2d2學(xué)號(hào)課程號(hào)成績(jī)教師系名2022/12/1039a下面是一個(gè)具體實(shí)例:S#C#GTNDs1c1g1t1d1s1雖然上述的關(guān)系模式只有四個(gè)屬性,但在使用過(guò)程中有以下幾個(gè)問(wèn)題:

(1)數(shù)據(jù)冗余。例如,教師所在系名對(duì)選該教師所開(kāi)課的所有學(xué)生都重復(fù)一次。

(2)插入異常。由于關(guān)系的主鍵{S#,C#}不能為空值,如果一個(gè)教師不教課,則這位教師的姓名及所屬的系名就不能插入表中。2022/12/1040a雖然上述的關(guān)系模式只有四個(gè)屬性,但在使用過(guò)程中有以下

(3)刪除異常。如果所有學(xué)生都退選某一門(mén)課,則有關(guān)該門(mén)課的其它數(shù)據(jù)(任課教師名及所在系名)也將被刪除。

(4)修改異常。例如,如果改變一門(mén)課的任課教師,則需要修改表中的多行記錄,如果部分修改,部分不修改,則會(huì)導(dǎo)致數(shù)據(jù)的不一致。上述關(guān)系模式只所以是一個(gè)不好的關(guān)系模式,是因?yàn)槟J街写嬖诓糠趾瘮?shù)依賴和傳遞函數(shù)依賴。消除這些部分函數(shù)依賴和傳遞函數(shù)依賴,就可以得到一個(gè)比較好的關(guān)系模式。2022/12/1041a(3)刪除異常。如果所有學(xué)生都退選某一門(mén)課,則有關(guān)4.4.2第二范式(2NF)(一)定義4.14對(duì)于FDW→A,如果存在X?W有X→A成立,那么稱W→A是局部依賴(A局部依賴于W);否則稱W→A是完全依賴。完全依賴也稱為“左部不可約依賴”。定義4.15如果A是關(guān)系模式R的候選鍵中屬性,那么稱A是R的主屬性;否則稱A是R的非主屬性。定義4.16如果關(guān)系模式R是1NF,且每個(gè)非主屬性完全函數(shù)依賴于候選鍵,那么稱R是第二范式(2NF)的模式。如果數(shù)據(jù)庫(kù)模式中每個(gè)關(guān)系模式都是2NF,則稱數(shù)據(jù)庫(kù)模式為2NF的數(shù)據(jù)庫(kù)模式。2022/12/1042a4.4.2第二范式(2NF)(一)定義4.14對(duì)于F4.4.2第二范式(2NF)(二)

例4.14

設(shè)關(guān)系模式R(S#,C#,GRADE,TNAME,TADDR)的屬性分別表示學(xué)生學(xué)號(hào)、選修課程的編號(hào)、成績(jī)、任課教師姓名和教師地址等意義。(S#,C#)是R的候選鍵。 R上有兩個(gè)FD:(S#,C#)→(TNAME,TADDR)和C#→(TNAME,TADDR),因此前一個(gè)FD是局部依賴,R不是2NF模式。此時(shí)R的關(guān)系就會(huì)出現(xiàn)冗余和異常現(xiàn)象。譬如某一門(mén)課程有100個(gè)學(xué)生選修,那么在關(guān)系中就會(huì)存在100個(gè)元組,因而教師的姓名和地址就會(huì)重復(fù)100次。 如果把R分解成R1(C#,TNAME,TADDR)和R2(S#,C#,GRADE)后,局部依賴(S#,C#)→(TNAME,TADDR)就消失了。R1和R2都是2NF模式。

2022/12/1043a4.4.2第二范式(2NF)(二) 例4.142024.4.2第二范式(2NF)(三)

算法4.4

分解成2NF模式集的算法 設(shè)關(guān)系模式R(U),主鍵是W,R上還存在FDX→Z,并且Z是非主屬性和XW,那么W→Z就是一個(gè)局部依賴。此時(shí)應(yīng)把R分解成兩個(gè)模式 R1(XZ),主鍵是X; R2(Y),其中Y=U-Z,主鍵仍是W,外鍵是X(REFERENCESR1)。 利用外鍵和主鍵的聯(lián)接可以從R1和R2重新得到R。 如果R1和R2還不是2NF,則重復(fù)上述過(guò)程,一直到數(shù)據(jù)庫(kù)模式中每一個(gè)關(guān)系模式都是2NF為止。2022/12/1044a4.4.2第二范式(2NF)(三) 算法4.4分解成例:是1NF但不是2NF的關(guān)系模式設(shè)有關(guān)系模式如下:

REPROT(S#,

C#,TITLE,LNAME,ROOM#,MARKS),其中S#是學(xué)號(hào),C#是課程號(hào),TITLE為課程名,LNAME是教師名,ROOM#是教室號(hào),MARKS是分?jǐn)?shù)。關(guān)系中的一個(gè)元組<s,c,t,l,r,m>表示學(xué)生s在課程c中的得分為m,課程名為t,由教師l講授,其教室編號(hào)為r。

若每門(mén)課只由一位教師講授,每位教師只有一個(gè)教室,即只在一個(gè)教室中講課,則REPORT的函數(shù)依賴如下:(S#,C#)MARKSC#TITLEC#LNAMELNAMEROOM#2022/12/1045a例:是1NF但不是2NF的關(guān)系模式2022/12/1045a關(guān)系模式REPROT(S#,C#,TITLE,LNAME,ROOM#,MARKS)的碼是(S#,C#),非主屬性TITLE,LNAME和ROOM#對(duì)碼是部分函數(shù)依賴,并存在傳遞函數(shù)依賴C#LNAME,LNAMEROOM#。REPORT屬于1NF,不屬于2NF。S#C#MARKSTITLELANMEROOM#圖5-32022/12/1046a關(guān)系模式REPROT(S#,C#,TITLE,消除部分函數(shù)依賴為消除部分函數(shù)依賴,將REPORT關(guān)系模式分解為REPORT1和COURSE這二個(gè)關(guān)系模式:

REPORT1(S#,C#,MARKS)

函數(shù)依賴是(S#,C#)MARKSCOURSE(C#,TITLE,LNAME,ROOM#)

函數(shù)依賴是C#TITLE,C#LNAME,LNAMEROOM#。

REPORT1和COURSE都消除了對(duì)碼的部分函數(shù)依賴,因此都屬于2NF。2022/12/1047a消除部分函數(shù)依賴為消除部分函數(shù)依賴,將REPOR一個(gè)關(guān)系模式僅僅滿足2NF仍是不夠的,如在關(guān)系模式COURSE(C#,TITLE,LNAME,ROOM#)中,仍存在著插入,刪除和修改異常問(wèn)題:新來(lái)的教師,還沒(méi)有分配授課之前,教師的姓名及教室編號(hào)都不能加到關(guān)系模式中;如果要修改教室編號(hào),必須修改與教師授課相對(duì)應(yīng)的各元組中的教室編號(hào),因?yàn)橐晃唤處熆赡軙?huì)教多門(mén)課。

存在上述這些問(wèn)題的原因是關(guān)系模式COURSE中存在傳遞函數(shù)依賴,所以要把關(guān)系模式COURSE向第三范式轉(zhuǎn)化,除去非主屬性對(duì)碼的傳遞函數(shù)依賴。2022/12/1048a一個(gè)關(guān)系模式僅僅滿足2NF仍是不夠的,如4.4.3第三范式(3NF)(一)定義4.17如果X→Y,Y→A,且Y→X和A∈Y,那么稱X→A是傳遞依賴(A傳遞依賴于X)。定義4.18如果關(guān)系模式R是1NF,且每個(gè)非主屬性都不傳遞依賴于R的候選鍵,那么稱R是第三范式(3NF)的模式。如果數(shù)據(jù)庫(kù)模式中每個(gè)關(guān)系模式都是3NF,則稱其為3NF的數(shù)據(jù)庫(kù)模式。2022/12/1049a4.4.3第三范式(3NF)(一)定義4.17如果X4.4.3第三范式(3NF)(二)例4.15

在例4.14中,R2是2NF模式,而且也已是3NF模式。但R1(C#,TNAME,TADDR)是2NF模式,卻不一定是3NF模式。如果R1中存在函數(shù)依賴C#→TNAME和TNAME→TADDR,那么C#→TADDR就是一個(gè)傳遞依賴,即R1不是3NF模式。此時(shí)R1的關(guān)系中也會(huì)出現(xiàn)冗余和異常操作。譬如一個(gè)教師開(kāi)設(shè)五門(mén)課程,那么關(guān)系中就會(huì)出現(xiàn)五個(gè)元組,教師的地址就會(huì)重復(fù)五次。如果把R2分解成R21(TNAME,TADDR)和R22(C#,TNAME)后,C#→TADDR就不會(huì)出現(xiàn)在R21和R22中。這樣R21和R22都是3NF模式。

2022/12/1050a4.4.3第三范式(3NF)(二)例4.15在例4.4.4.3第三范式(3NF)(三)

算法4.5

分解成3NF模式集的算法 設(shè)關(guān)系模式R(U),主鍵是W,R上還存在FDX→Z。并且Z是非主屬性,ZX,X不是候選鍵,這樣W→Z就是一個(gè)傳遞依賴。此時(shí)應(yīng)把R分解成兩個(gè)模式: R1(XZ),主鍵是X; R2(Y),其中Y=U-Z,主鍵仍是W,外鍵是X(REFERENCESR1)。 利用外鍵和主鍵相匹配機(jī)制,R1和R2通過(guò)聯(lián)接可以重新得到R。 如果R1和R2還不是3NF,則重復(fù)上述過(guò)程,一直到數(shù)據(jù)庫(kù)模式中每一個(gè)關(guān)系模式都是3NF為止。2022/12/1051a4.4.3第三范式(3NF)(三) 算法4.5分解成4.4.3第三范式(3NF)(四)定理4.9 如果R是3NF模式,那么R也是2NF模式。定理4.10設(shè)關(guān)系模式R,當(dāng)R上每一個(gè)FDX→A滿足下列三個(gè)條件之一時(shí):A∈X(即X→A是一個(gè)平凡的FD);X是R的超鍵; A是主屬性。關(guān)系模式R就是3NF模式。2022/12/1052a4.4.3第三范式(3NF)(四)定理4.9 如果R是34.4.3第三范式(3NF)(五)圖4.15違反3NF的傳遞依賴的三種情況

2022/12/1053a4.4.3第三范式(3NF)(五)圖4.15違反3N

在前面的例子中,關(guān)系模式:

COURSE(C#,TITLE,LNAME,ROOM#)其中存在非主屬性ROOM#對(duì)碼的傳遞依賴,即:

C#LNAME,LNAMEROOM#,因此COURSE不屬于3NF。將COURSE分解為:

COURSE1(C#,TITLE,LNAME)

LECTURE(LNAME,ROOM#),

則關(guān)系模式COURSE1和LECTURE中都沒(méi)有傳遞函數(shù)依賴,因此COURSE1和LECTURE都屬于3NF。2022/12/1054a在前面的例子中,關(guān)系模式:2022/12/1054至此,關(guān)系模式REPORT分解為下列3個(gè)屬于3NF的一組關(guān)系模式:REPORT1(S#,C#,MARKS)COURSE1(C#,TITLE,LNAME)

LECTURE(LNAME,ROOM#)和關(guān)系模式REPORT相比,這些關(guān)系模式是對(duì)現(xiàn)實(shí)世界更加精確的描述。把這3個(gè)關(guān)系進(jìn)行連接,總能重構(gòu)初始的關(guān)系。2022/12/1055a至此,關(guān)系模式REPORT分解為下列3個(gè)屬于3NF的一組關(guān)系4.4.4BCNF(Boyce–CoddNF)(一)圖4.16主屬性對(duì)候選鍵的傳遞依賴

2022/12/1056a4.4.4BCNF(Boyce–CoddNF)(一)圖4.4.4BCNF(Boyce–CoddNF)(二)定義4.19如果關(guān)系模式R是1NF,且每個(gè)屬性都不傳遞依賴于R的候選鍵,那么稱R是BCNF的模式。如果數(shù)據(jù)庫(kù)模式中每個(gè)關(guān)系模式都是BCNF,則稱為BCNF的數(shù)據(jù)庫(kù)模式。定理4.11如果R是BCNF模式,那么R也是3NF模式。定義4.19’設(shè)F是關(guān)系模式R的FD集,如果對(duì)F中每個(gè)非平凡的FDX→Y,都有X是R的超鍵,那么稱R是BCNF的模式。2022/12/1057a4.4.4BCNF(Boyce–CoddNF)(二)定4.4.5分解成BCNF模式集的算法 算法4.6無(wú)損分解成BCNF模式集 對(duì)于關(guān)系模式R的分解ρ(初始時(shí)ρ={R}),如果ρ中有一個(gè)關(guān)系模式Ri相對(duì)于πRi(F)不是BCNF。據(jù)定義4-20可知,Ri中存在一個(gè)非平凡FDX→Y,有X不包含超鍵。此時(shí)把Ri分解成XY和Ri-Y兩個(gè)模式。重復(fù)上述過(guò)程,一直到ρ中每一個(gè)模式都是BCNF。2022/12/1058a4.4.5分解成BCNF模式集的算法 算法4.6無(wú)損例:一個(gè)是3NF但不是BCNF的關(guān)系模式設(shè)有關(guān)系模式STJ(S,T,J),S表示學(xué)生,T表示教師,J表示課程。每一教師只教一門(mén)課,每門(mén)課有若干教師,某一學(xué)生選定某門(mén)課,就對(duì)應(yīng)一個(gè)固定的教師,由語(yǔ)義可得到如下的函數(shù)依賴。(S,J)T;(S,T)J;TJ,即學(xué)生,所選課程決定授課教師;學(xué)生,授課教師決定所選課程;教師決定所授課程;如下圖所示:2022/12/1059a例:一個(gè)是3NF但不是BCNF的關(guān)系模式2022/12/10則(S,J),(S,T)都是候選碼;S,T,J都是主屬性。STJ3NF,因?yàn)闆](méi)有任何非主屬性對(duì)候選碼的傳遞依賴或部分依賴。STJBCNF,因?yàn)橹鲗傩訨傳遞函數(shù)依賴于候選碼S,J。SJTSTJ圖

STJ中的函數(shù)依賴2022/12/1060a則(S,J),(S,T)都是候選碼;S,T,J都是主屬性。S模式設(shè)計(jì)示例例:學(xué)生基本情況的關(guān)系模式:STUDENT(SNO,SNAME,AGE,SEX,CLASS,DEP,CNO,CNAME,GRADE,SCORE)該關(guān)系模式的函數(shù)依賴集F={SNOSNAME,SNOAGE,SNOSEX, SNOCLASS,SNODEP,CLASSDEP, CNOCNAME,CNOSCORE, SNO+CNOGRADE}

該模式的碼是(SNO,CNO)

該模式是屬于1NF:滿足的條件是元組的每個(gè)分量必須是不可分的數(shù)據(jù)項(xiàng)。不是一個(gè)好的關(guān)系模式。同學(xué)自己分析為什么是一個(gè)不好的關(guān)系模式?2022/12/1061a模式設(shè)計(jì)示例例:學(xué)生基本情況的關(guān)系模式:2022/12/10修改設(shè)計(jì)使其滿足第二范式2NF關(guān)系模式STUDENT不符合2NF要求。因?yàn)槠渲写嬖诓糠趾瘮?shù)依賴。關(guān)系模式STUDENT的主碼是(SNO,CNO)。非主屬性SNAME,AGE,SEX,CLASS,DEP, CNAME,GRADE,SCORE

非主屬性中存在對(duì)碼的部分函數(shù)依賴,如,SNOSNAME,CNOCNAME。2022/12/1062a修改設(shè)計(jì)使其滿足第二范式2NF關(guān)系模式STUDENT不符合2消除部分函數(shù)依賴

將STUDENT關(guān)系模式分解,消除部分函數(shù)依賴,得到三個(gè)關(guān)系模式符合2NF要求:STUDENT2(SNO,SNAME,AGE,SEX,CLASS,DEP)COURSE(CNO,CNAME,SCORE)SC(SNO,CNO,GRADE) 在STUDENT2模式中,仍然存在數(shù)據(jù)冗余,以及插入和刪除異常。2022/12/1063a消除部分函數(shù)依賴將STUDENT關(guān)系模式修改設(shè)計(jì)使其滿足第三范式3NF關(guān)系模式STUDENT2不滿足第三范式要求,存在傳遞依賴。如SNOCLASSDEP,消除傳遞依賴,分解STUDENT2如下:STUDENT3(SNO,SNAME,AGE,SEX,CLASS)CLASS(CLASS,DEP)2022/12/1064a修改設(shè)計(jì)使其滿足第三范式3NF關(guān)系模式STUDENT2不滿足滿足第三范式要求至此,關(guān)系模式STUDENT分解為4個(gè)3NF的關(guān)系模式:STUDENT3(SNO,SNAME,AGE,SEX,CLASS)CLASS(CLASS,DEP)COURSE(CNO,CNAME,SCORE)SC(SNO,CNO,GRADE)2022/12/1065a滿足第三范式要求至此,關(guān)系模式STUDENT分解為4個(gè)3N修改設(shè)計(jì)使其滿足BCNF范式例如,關(guān)系模式課程COUSE(CNO,CNAME,SCORE),只有一個(gè)碼CNO,沒(méi)有任何屬性對(duì)碼有部分和傳遞函數(shù)以來(lái),所以COUSE3NF。同時(shí),COUSE中CNO是唯一的決定因素,因此COUSEBCNF。2022/12/1066a修改設(shè)計(jì)使其滿足BCNF范式例如,關(guān)系模式課程COUSE(C模式分解習(xí)題設(shè)有關(guān)系模式R(U,F),其中U={A,B,C,D,E},F(xiàn)={ABC,BD,DE,CB},試問(wèn)R最高為第幾范式,并解釋原因?如果R不是3NF或BCNF,要求將其分解為3NF和BCNF。2022/12/1067a模式分解習(xí)題設(shè)有關(guān)系模式R(U,F),其中U={A,B關(guān)系R中的函數(shù)依賴如下圖表示R(A,B,C,D,E):

A,BC;

BD;

DE;

CBABCDE候選鍵:(A,B)和(A,C)候選鍵是什么?能夠唯一標(biāo)識(shí)一個(gè)元組的某一屬性或?qū)傩越M。2022/12/1068a關(guān)系R中的函數(shù)依賴如下圖表示R(A,B,C,D,E):A是否滿足第一范式第一范式規(guī)定關(guān)系的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng)??梢钥闯觯撽P(guān)系滿足第一范式。ABCDE2022/12/1069a是否滿足第一范式第一范式規(guī)定關(guān)系的每一個(gè)分量必須是一個(gè)不可分是否滿足第二范式如果關(guān)系模式R滿足第一范式,且它的任何一個(gè)非主屬性都完全函數(shù)依賴于任一個(gè)候選碼,則R滿足第二范式(簡(jiǎn)記為2NF)。ABCDER(A,B,C,D,E):

A,BC;

BD;

DE;

CB所以不是第二范式2022/12/1070a是否滿足第二范式如果關(guān)系模式R滿足第一范式,且它的任何一個(gè)非分解成第二范式R1(A,B,C):

A,BC;

CBR2

(B,D,E): BD;

DE;

ABCBDE2022/12/1071a分解成第二范式R1(A,B,C):ABCBDE2022/1是否滿足第三范式如果關(guān)系模式R滿足2NF,并且它的任何一個(gè)非主屬性都不傳遞依賴于任何候選碼,則稱R是第三范式(3NF),記作R3NF。ABCBDER1(A,B,C):

A,BC;

CBR2(B,D,E): BD;

DE;所以不是第三范式2022/12/1072a是否滿足第三范式如果關(guān)系模式R滿足2NF,并且它的任何一個(gè)分解成第三范式R1(A,B,C)

A,BC;

CBR21(B,D): BDR22(D,E): DEABCDDBE2022/12/1073a分解成第三范式R1(A,B,C):ABCDDBE2022/是否滿足BCNF范式如果關(guān)系模式R是1NF,且每個(gè)屬性都不傳遞依賴于R的候選碼,那么稱R是BCNF的模式。ABCDDBER1(A,B,C)

A,BC;

CBR21(B,D): BDR22(D,E): DER1中屬性B傳遞依賴于R的候選碼AB,故R1不是BCNF范式2022/12/1074a是否滿足BCNF范式如果關(guān)系模式R是1NF,且每個(gè)屬性都不傳是否滿足BCNF范式關(guān)系模式R1NF,若XY,且YX時(shí),X必含有候選碼,則RBCNF。

ABCDDBER1(A,B,C)

A,BC;

CBR21(B,D): BDR22(D,E): DE

R1中C

B,且BC,但B不含有任何候選碼,故R1不是BCNF范式2022/12/1075a是否滿足BCNF范式關(guān)系模式R1NF,若XY,且YX分解成BCNF范式ABCDDBER1

A,BC;

CBR21: BDR22: DEACBDDBER11

A,BR12

CBR21: BDR22: DEB2022/12/1076a分解成BCNF范式ABCDDBER1:ACBDDBER11小結(jié)(一)本章討論如何設(shè)計(jì)關(guān)系模式問(wèn)題。關(guān)系模式設(shè)計(jì)得好與壞,直接影響到數(shù)據(jù)冗余度、數(shù)據(jù)一致性等問(wèn)題。要設(shè)計(jì)好的數(shù)據(jù)庫(kù)模式,必須有一定的理論為基礎(chǔ)。這就是模式規(guī)范化理論。在數(shù)據(jù)庫(kù)中,數(shù)據(jù)冗余是指同一個(gè)數(shù)據(jù)存儲(chǔ)了多次,由數(shù)據(jù)冗余將會(huì)引起各種操作異常。通過(guò)把模式分解成若干比較小的關(guān)系模式可以消除冗余。2022/12/1077a小結(jié)(一)本章討論如何設(shè)計(jì)關(guān)系模式問(wèn)題。關(guān)系模式設(shè)計(jì)得好小結(jié)(二)函數(shù)依賴X→Y是數(shù)據(jù)之間最基本的一種聯(lián)系,在關(guān)系中有兩個(gè)元組,如果X值相等那么要求Y值也相等。FD有一個(gè)完備的推理規(guī)則集。關(guān)系模式在分解時(shí)應(yīng)保持“等價(jià)”,有數(shù)據(jù)等價(jià)和語(yǔ)義等價(jià)兩種,分別用無(wú)損分解和保持依賴兩個(gè)特征來(lái)衡量。前者能保持泛關(guān)系在投影聯(lián)接以后仍能恢復(fù)回來(lái),而后者能保證數(shù)據(jù)在投影或聯(lián)接中其語(yǔ)義不會(huì)發(fā)生變化,也就是不會(huì)違反FD的語(yǔ)義。但無(wú)損分解與保持依賴兩者之間沒(méi)有必然的聯(lián)系。2022/12/1078a小結(jié)(二)函數(shù)依賴X→Y是數(shù)據(jù)之間最基本的一種聯(lián)系,在關(guān)小結(jié)(三)范式是衡量模式優(yōu)劣的標(biāo)準(zhǔn),范式表達(dá)了模式中數(shù)據(jù)依賴之間應(yīng)滿足的聯(lián)系。如果關(guān)系模式R是3NF,那么R上成立的非平凡FD都應(yīng)該左邊是超鍵或右邊是非主屬性。如果關(guān)系模式R是BCNF,那么R上成立的非平凡的FD都應(yīng)該左邊是超鍵。范式的級(jí)別越高,其數(shù)據(jù)冗余和操作異?,F(xiàn)象就越少。2022/12/1079a小結(jié)(三)范式是衡量模式優(yōu)劣的標(biāo)準(zhǔn),范式表達(dá)了模式中數(shù)據(jù)小結(jié)(四)分解成BCNF模式集的算法能保持無(wú)損分解,但不一定能保持FD集。而分解成3NF模式集的算法既能保持無(wú)損分解,又能保持FD集。關(guān)系模式的規(guī)范化過(guò)程實(shí)際上是一個(gè)“分解”過(guò)程:把邏輯上獨(dú)立的信息放在獨(dú)立的關(guān)系模式中。分解是解決數(shù)據(jù)冗余的主要方法,也是規(guī)范化的一條原則:“關(guān)系模式有冗余問(wèn)題就分解它”。2022/12/1080a小結(jié)(四)分解成BCNF模式集的算法能保持無(wú)損分解,但不本章的重點(diǎn)篇幅

(1)教材中P148的例4.13。(無(wú)損聯(lián)接和保持FD的例子) (2)教材中P149的例4.14和P150的例4.15。(分解成2NF和3NF的例子)

2022/12/1081a本章的重點(diǎn)篇幅 (1)教材中P148的例4.13。(無(wú)損聯(lián)第4章關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)2022/12/1082a第4章關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)2022/12/101a本章重要概念(1)關(guān)系模式的冗余和異常問(wèn)題。(2)FD的定義、邏輯蘊(yùn)涵、閉包、推理規(guī)則、與關(guān)鍵碼的聯(lián)系;平凡的FD;屬性集的閉包;推理規(guī)則的正確性和完備性;FD集的等價(jià);最小依賴集。(3)無(wú)損分解的定義、性質(zhì)、測(cè)試;保持依賴集的分解。(4)關(guān)系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。2022/12/1083a本章重要概念(1)關(guān)系模式的冗余和異常問(wèn)題。2022/前言關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)是指面對(duì)一個(gè)現(xiàn)實(shí)問(wèn)題,如何選擇一個(gè)比較好的關(guān)系模式集合。規(guī)范化設(shè)計(jì)理論主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)依賴、范式和模式設(shè)計(jì)方法。其中數(shù)據(jù)依賴起著核心的作用。數(shù)據(jù)依賴研究數(shù)據(jù)之間的聯(lián)系,范式是關(guān)系模式的標(biāo)準(zhǔn),模式設(shè)計(jì)方法是自動(dòng)化設(shè)計(jì)的基礎(chǔ)。規(guī)范化設(shè)計(jì)理論對(duì)關(guān)系數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)起著重要的作用。2022/12/1084a前言關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)是指面對(duì)一個(gè)現(xiàn)實(shí)問(wèn)題,如何選擇4.1.1關(guān)系模型的外延和內(nèi)涵外延就是通常所說(shuō)的關(guān)系、表或當(dāng)前值,它的基本性質(zhì)已在前面介紹過(guò)。由于用戶經(jīng)常對(duì)關(guān)系進(jìn)行插入、刪除和修改操作,因此外延是與時(shí)間有關(guān)的,隨著時(shí)間的推移在不斷變化。內(nèi)涵是與時(shí)間獨(dú)立的,是對(duì)數(shù)據(jù)的定義以及數(shù)據(jù)完整性約束的定義。對(duì)數(shù)據(jù)的定義包括對(duì)關(guān)系、屬性、域的定義和說(shuō)明。對(duì)數(shù)據(jù)完整性約束的定義涉及面較廣,主要包括以下幾個(gè)方面:靜態(tài)約束,涉及到數(shù)據(jù)之間聯(lián)系(稱為“數(shù)據(jù)依賴,datadependences)、主鍵和值域的設(shè)計(jì)。動(dòng)態(tài)約束,定義各種操作(插入、刪除、修改)對(duì)關(guān)系值的影響。2022/12/1085a4.1.1關(guān)系模型的外延和內(nèi)涵外延就是通常所說(shuō)的關(guān)系、表4.1.2關(guān)系模式的冗余和異常問(wèn)題(一)例4.1TNAMEADDRESSC#CNAMEt1a1c1n1t1a1c2n2t1a1c3n3t2a2c4n4t2a2c5n2t3a3c6n4圖4.1關(guān)系模式R的實(shí)例

2022/12/1086a4.1.2關(guān)系模式的冗余和異常問(wèn)題(一)例4.1TNA4.1.2關(guān)系模式的冗余和異常問(wèn)題(二)數(shù)據(jù)冗余如果一個(gè)教師教幾門(mén)課程,那么這個(gè)教師的地址就要重復(fù)幾次存儲(chǔ)。操作異常由于數(shù)據(jù)的冗余,在對(duì)數(shù)據(jù)操作時(shí)會(huì)引起各種異常:修改異常。例如教師t1教三門(mén)課程,在關(guān)系中就會(huì)有三個(gè)元組。如果他的地址變了,這三個(gè)元組中的地址都要改變。若有一個(gè)元組中的地址未更改,就會(huì)造成這個(gè)教師的地址不惟一,產(chǎn)生不一致現(xiàn)象。插入異常。如果一個(gè)教師剛調(diào)來(lái),尚未分派教學(xué)任務(wù),那么要將教師的姓名和地址存儲(chǔ)到關(guān)系中去時(shí),在屬性C#和CNAME上就沒(méi)有值(空值)。在數(shù)據(jù)庫(kù)技術(shù)中空值的語(yǔ)義是非常復(fù)雜的,對(duì)帶空值元組的檢索和操作也十分麻煩。刪除異常。如果在圖4.1中要取消教師t3的教學(xué)任務(wù),那么就要把這個(gè)教師的元組刪去,同時(shí)也把t3的地址信息從表中刪去了。這是一種不合適的現(xiàn)象。2022/12/1087a4.1.2關(guān)系模式的冗余和異常問(wèn)題(二)數(shù)據(jù)冗余20224.1.2關(guān)系模式的冗余和異常問(wèn)題(三)TNAMEADDRESSTNAMEC#CNAMEt1a1t1c1n1t2a2t1c2n2t3a3t1c3n3

t2c4n4

t2c5n2

t3c6n4圖4.2關(guān)系模式分解的實(shí)例

(a)關(guān)系模式R1的實(shí)例

(b)關(guān)系模式R2的實(shí)例

2022/12/1088a4.1.2關(guān)系模式的冗余和異常問(wèn)題(三)TNAMEADD4.2.1函數(shù)依賴的定義(一)定義4.1設(shè)有關(guān)系模式R(U),X和Y是屬性集U的子集,函數(shù)依賴(FunctionalDependency,簡(jiǎn)記為FD)是形為X→Y的一個(gè)命題,只要r是R的當(dāng)前關(guān)系,對(duì)r中任意兩個(gè)元組t和s,都有t[X]=s[X]蘊(yùn)涵t[Y]=s[Y],那么稱FDX→Y在關(guān)系模式R(U)中成立。2022/12/1089a4.2.1函數(shù)依賴的定義(一)定義4.1設(shè)有關(guān)系模4.2.1函數(shù)依賴的定義(二)例4.2ABCDABCDa1b1c1d1a1b1c1d1a1b1c2d2a1b2c2d2a2b2c3d3a2b2c3d3a3b1c4d4a3b2c4d4圖4.3關(guān)系模式R的兩個(gè)關(guān)系

2022/12/1090a4.2.1函數(shù)依賴的定義(二)例4.2ABCDABCD4.2.1函數(shù)依賴的定義(三)

例4.3

有一個(gè)關(guān)于學(xué)生選課、教師任課的關(guān)系模式:

R(S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE) 屬性分別表示學(xué)生學(xué)號(hào)、姓名、選修課程的課程號(hào)、成績(jī)、課程名、任課教師姓名和年齡等意義。

如果規(guī)定,每個(gè)學(xué)號(hào)只能有一個(gè)學(xué)生姓名,每個(gè)課程號(hào)只能決定一門(mén)課程,那么可寫(xiě)成下列FD形式:

S#→SNAME C#→CNAME 每個(gè)學(xué)生每學(xué)一門(mén)課程,有一個(gè)成績(jī),那么可寫(xiě)出下列FD:

(S#,C#)→GRADE 還可以寫(xiě)出其他一些FD:

C#→(CNAME,TNAME,TAGE)TNAME→TAGE2022/12/1091a4.2.1函數(shù)依賴的定義(三) 例4.3有一個(gè)關(guān)于4.2.2FD的邏輯蘊(yùn)涵定義4.2設(shè)F是在關(guān)系模式R上成立的函數(shù)依賴的集合,X→Y是一個(gè)函數(shù)依賴。如果對(duì)于R的每個(gè)滿足F的關(guān)系r也滿足X→Y,那么稱F邏輯蘊(yùn)涵X→Y,記為F?X→Y。定義4.3設(shè)F是函數(shù)依賴集,被F邏輯蘊(yùn)涵的函數(shù)依賴全體構(gòu)成的集合,稱為函數(shù)依賴集F的閉包(closure),記為F+。即F+={X→Y|記為F?X→Y。}2022/12/1092a4.2.2FD的邏輯蘊(yùn)涵定義4.2設(shè)F是在關(guān)系模式R4.2.3FD的推理規(guī)則(一)設(shè)U是關(guān)系模式R的屬性集,F(xiàn)是R上成立的只涉及到U中屬性的函數(shù)依賴集。FD的推理規(guī)則有以下三條:A1(自反性,Reflexivity):若YXU,則X→Y在R上成立。A2(增廣性,Augmentation):若X→Y在R上成立,且ZU,則XZ→YZ在R上成立。A3(傳遞性,Transitivity):若X→Y和Y→Z在R上成立,則X→Z在R上成立。2022/12/1093a4.2.3FD的推理規(guī)則(一)設(shè)U是關(guān)系模式R的屬性集,4.2.3FD的推理規(guī)則(二)定理4.1FD推理規(guī)則A1、A2和A3是正確的。也就是,如果X→Y是從F用推理規(guī)則導(dǎo)出,那么X→Y在F+中。定理4.2FD的其他五條推理規(guī)則:(1)A4(合并性,Union):{X→Y,X→Z}?X→YZ。(2)A5(分解性,Decomposition):{X→Y,ZY}X→Z。(3)A6(偽傳遞性):{X→Y,WY→Z}?WX→Z。(4)A7(復(fù)合性,Composition):{X→Y,W→Z}XW→YZ。(5)A8{X→Y,W→Z}?X∪(W-Y)→YZ。2022/12/1094a4.2.3FD的推理規(guī)則(二)定理4.1FD推理規(guī)則4.2.3FD的推理規(guī)則(三)例4.5已知關(guān)系模式R(ABC),F(xiàn)={A→B,B→C},求F+。 根據(jù)FD的推理規(guī)則,可推出F的F+有43個(gè)FD。 例如,據(jù)規(guī)則A1可推出A→φ(φ表示空屬性集),A→A,…。據(jù)已知的A→B及規(guī)則A2可推出AC→BC,AB→B,A→AB,…。據(jù)已知條件及規(guī)則A3可推出A→C等。 有興趣的同學(xué)可推出這43個(gè)FD。2022/12/1095a4.2.3FD的推理規(guī)則(三)例4.5已知關(guān)系模式R4.2.3FD的推理規(guī)則(四)定義4.4對(duì)于FDX→Y,如果YX,那么稱X→Y是一個(gè)“平凡的FD”,否則稱為“非平凡的FD”。定理4.3如果A1…An是關(guān)系模式R的屬性集,那么X→A1…An成立的充分必要條件是X→Ai(i=1,…,n)成立。2022/12/1096a4.2.3FD的推理規(guī)則(四)定義4.4對(duì)于FD4.2.4FD和關(guān)鍵碼的聯(lián)系定義4.5

設(shè)關(guān)系模式R的屬性集是U,X是U的一個(gè)子集。如果X→U在R上成立,那么稱X是R的一個(gè)超鍵。如果X→U在R上成立,但對(duì)于X的任一真子集X1都有X1→U不成立,那么稱X是R上的一個(gè)候選鍵。本章的鍵都是指候選鍵。

例4.6

在學(xué)生選課、教師任課的關(guān)系模式中: R(S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE) 如果規(guī)定:每個(gè)學(xué)生每學(xué)一門(mén)課只有一個(gè)成績(jī);每個(gè)學(xué)生只有一個(gè)姓名;每個(gè)課程號(hào)只有一個(gè)課程名;每門(mén)課程只有一個(gè)任課教師。 根據(jù)這些規(guī)則,可以知道(S#,C#)能函數(shù)決定R的全部屬性,并且是一個(gè)候選鍵。雖然(S#,SNAME,C#,TNAME)也能函數(shù)決定R的全部屬性,但相比之下,只能說(shuō)是一個(gè)超鍵,而不能說(shuō)是候選鍵,因?yàn)槠渲泻卸嘤鄬傩浴?/p>

2022/12/1097a4.2.4FD和關(guān)鍵碼的聯(lián)系定義4.5設(shè)關(guān)系模式R的4.2.5屬性集的閉包定義4.6設(shè)F是屬性集U上的FD集,X是U的子集,那么(相對(duì)于F)屬性集X的閉包用X+表示,它是一個(gè)從F集使用FD推理規(guī)則推出的所有滿足X→A的屬性A的集合:X+={屬性A|X→A在F+中}定理4.4X→Y能用FD推理規(guī)則推出的充分必要條件是YX+。例4.7屬性集U為ABCD,F(xiàn)D集為{A→B,B→C,D→B}。則用上述算法,可求出A+=ABC,(AD)+=ABCD,(BD)+=BCD,等等。2022/12/1098a4.2.5屬性集的閉包定義4.6設(shè)F是屬性集U上的4.2.5FD推理規(guī)則的完備性推理規(guī)則的正確性是指“從FD集F使用推理規(guī)則集推出的FD必定在F+中”,完備性是指“F+中的FD都能從F集使用推理規(guī)則集導(dǎo)出”。也就是正確性保證了推出的所有FD是正確的,完備性保證了可

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論