6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)
文章目錄
- 0.思維導(dǎo)圖
- 1.為什么要學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論?
- (1)基本概念回顧
- (2)關(guān)系模式的形式化定義
- (3)什么是數(shù)據(jù)依賴F?
- (4)數(shù)據(jù)依賴F對(duì)關(guān)系模式的影響
- 1?? 數(shù)據(jù)冗余(Data redundancy)
- 2?? 更新異常(update anomalies )
- 3?? 插入異常(insertion anomalies )
- 4?? 刪除異常( deletion anomalies)
- 2.規(guī)范化---改造關(guān)系模式,解決插入異常、刪除異常、更新異常和數(shù)據(jù)冗余問(wèn)題。
- (1)規(guī)范化研究什么?
- (2)函數(shù)依賴
- ① 函數(shù)依賴
- ② 平凡函數(shù)依賴與非平凡函數(shù)依賴
- ③ 完全函數(shù)依賴與部分函數(shù)依賴
- ④ 傳遞函數(shù)依賴
- (3)碼
- ① 候選碼、超碼、主碼
- ② 主屬性和非主屬性
- ③ 外部碼
- (4)范式
- ① 1NF
- ② 2NF
- ③ 3NF
- ④ BCNF
- ⑤ 3NF與BCNF的關(guān)系
- (5)多值依賴
- ① 多值依賴的定義
- ② 平凡多值依賴和非平凡多值依賴
- ③ 多值依賴與函數(shù)依賴的區(qū)別
- (6)4NF
- (7)規(guī)范化小結(jié)---重點(diǎn)歸納步驟
0.思維導(dǎo)圖
1.為什么要學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論?
感性認(rèn)識(shí):
- 當(dāng)我們面對(duì)一個(gè)實(shí)際問(wèn)題時(shí),我們應(yīng)該如何去建數(shù)據(jù)庫(kù),建表,庫(kù)的結(jié)構(gòu),表的結(jié)構(gòu)我們?cè)撊绾谓M織,才能更好的解決問(wèn)題。
- 如何省內(nèi)存,提高查詢修改刪除更新的效率?
- 如何避免可能出現(xiàn)的隱患,如修改刪除更新插入等異常?
- 以上就是關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論研究解決的問(wèn)題,說(shuō)白了就是告訴你如何才能設(shè)計(jì)出合適的庫(kù)和表
下面我們回顧幾個(gè)概念和問(wèn)題,以便更好地學(xué)習(xí)后面的關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論
(1)基本概念回顧
-
關(guān)系:可簡(jiǎn)單的理解為二維表
-
關(guān)系模式:即二維表的邏輯結(jié)構(gòu)
-
關(guān)系數(shù)據(jù)庫(kù):指采用了關(guān)系模型來(lái)組織數(shù)據(jù)的數(shù)據(jù)庫(kù),其以行和列的形式存儲(chǔ)數(shù)據(jù),關(guān)系型數(shù)據(jù)庫(kù)這一系列的行和列被稱為表,一組表組成了數(shù)據(jù)庫(kù)。
-
關(guān)系數(shù)據(jù)庫(kù)的模式:即關(guān)系數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)
(2)關(guān)系模式的形式化定義
- 這里我們回顧一下《數(shù)據(jù)庫(kù)系統(tǒng)概論》中對(duì)二維表結(jié)構(gòu)的定義
關(guān)系模式由五部分組成,即它是一個(gè)五元組:
R(U, D, DOM, F)
R: 關(guān)系名,即表名
U: 組成該關(guān)系的屬性名集合
D: 屬性組U中屬性所來(lái)自的域。數(shù)據(jù)的取值范圍和類型
DOM: 屬性向域的映象集合
F: 屬性組U上的一組數(shù)據(jù)依賴。
關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論研究的就是R、F、U,之間的關(guān)系。
因?yàn)镈和DOM對(duì)研究表的設(shè)計(jì)關(guān)系不大,所以在學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論時(shí)可以將五元組簡(jiǎn)化成三元組
三元組:R(U, F)
當(dāng)且僅當(dāng)U上的一個(gè)關(guān)系r滿足F時(shí),r稱為關(guān)系模式 R(U, F)的一個(gè)關(guān)系
(3)什么是數(shù)據(jù)依賴F?
這里我們對(duì)F中的數(shù)據(jù)依賴進(jìn)行簡(jiǎn)單解釋,后面會(huì)詳細(xì)敘述函數(shù)依賴和多值依賴。
數(shù)據(jù)依賴是一個(gè)關(guān)系內(nèi)部屬性與屬性之間的一種約束關(guān)系。
這種約束關(guān)系是通過(guò)屬性間值的相等與否體現(xiàn)出來(lái)的數(shù)據(jù)間相關(guān)聯(lián)系。
它是現(xiàn)實(shí)世界屬性間相互聯(lián)系的抽象,是數(shù)據(jù)內(nèi)在的性質(zhì),是語(yǔ)義的體現(xiàn)。
數(shù)據(jù)依賴分類:
- 函數(shù)依賴(Functional Dependency,簡(jiǎn)記為FD)
函數(shù)依賴極為普遍地存在于現(xiàn)實(shí)生活中。比如描述一個(gè)學(xué)生的關(guān)系,可以有學(xué)號(hào)(Sno)、姓名(Sname)、 系名(Sdept) 等幾個(gè)屬性。由于一個(gè)學(xué)號(hào)只對(duì)應(yīng)一個(gè)學(xué)生,一個(gè)學(xué)生只在一一個(gè)系學(xué)習(xí)。因而當(dāng)“學(xué)號(hào)”值確定之后,學(xué)生的姓名及所在系的值也就被唯一地確定了。屬性間的這種依賴關(guān)系類似于數(shù)學(xué)中的函數(shù)y=f(x),自變量x確定之后,相應(yīng)的函數(shù)值y也就唯一地確定 了。
- 多值依賴(Multivalued Dependency,簡(jiǎn)記為MVD)
- 其他
(4)數(shù)據(jù)依賴F對(duì)關(guān)系模式的影響
- 因?yàn)殛P(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論主要研究的是三元組R(U,F),U我們都好理解,最重要的是F,這里我們簡(jiǎn)單的了解一下F對(duì)關(guān)系模式,即表的邏輯結(jié)構(gòu)的影響,讓我們理性的認(rèn)識(shí)為什么學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論
舉個(gè)例子:
[例1]建立一個(gè)描述學(xué)校教務(wù)的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)涉及的對(duì)象有:
學(xué)生的學(xué)號(hào)(Sno)、所在系(Sdept)、系主任姓名(Mname)、課程名(Cname)、成績(jī)(Grade)
這里我們用單一的關(guān)系模式Student來(lái)表示這些對(duì)象:
Student <U、F>
該關(guān)系的屬性集合:
U ={ Sno, Sdept, Mname, Cname, Grade }
這里說(shuō)明一下現(xiàn)實(shí)世界的事實(shí)語(yǔ)義,關(guān)于這些對(duì)象之間的聯(lián)系:
①一個(gè)系有若干學(xué)生,但一個(gè)學(xué)生只屬于一個(gè)系。
②一個(gè)系只有一名(正職)負(fù)責(zé)人。
③一個(gè)學(xué)生可以選修多門課程,每門課程有若干學(xué)生選修。
④每個(gè)學(xué)生學(xué)習(xí)每一一門課程有一個(gè)成績(jī)。
于是得到屬性組U上的一組函數(shù)依賴F
F={Sno- > Sdept, Sdept- >Mname, (Sno, Cno)- >Grade}
(如圖所示)
- 如果只考慮函數(shù)依賴這一種數(shù)據(jù)依賴, 可以得到一個(gè)描述學(xué)生的關(guān)系模式Student <U,F>。表6.1是某一時(shí)刻關(guān)系模式Student的一個(gè)實(shí)例,即數(shù)據(jù)表。
這個(gè)關(guān)系模式設(shè)計(jì)的并不好,存在以下問(wèn)題:
1?? 數(shù)據(jù)冗余(Data redundancy)
- 比如,每一個(gè)系的系主任姓名重復(fù)出現(xiàn),重復(fù)次數(shù)與該系所有學(xué)生的所有課程成績(jī)出現(xiàn)次數(shù)相同,如表6.1所示。這將浪費(fèi)大量的存儲(chǔ)空間。
2?? 更新異常(update anomalies )
- 由于數(shù)據(jù)冗余,當(dāng)更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),系統(tǒng)要付出很大的代價(jià)來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性,否則會(huì)面臨數(shù)據(jù)不一致的危險(xiǎn)。 比如,某系更換系主任后,必須修改與該系學(xué)生有關(guān)的每一個(gè)元組。
3?? 插入異常(insertion anomalies )
- 如果一個(gè)系剛成立,尚無(wú)學(xué)生,則無(wú)法把這個(gè)系及其系主任的信息存入數(shù)據(jù)庫(kù)。
4?? 刪除異常( deletion anomalies)
- 如果某個(gè)系的學(xué)生全部畢業(yè)了,則在刪除該系學(xué)生信息的同時(shí),這個(gè)系及其系主任的信息也丟掉了。
鑒于存在以上種種問(wèn)題,可以得出這樣的結(jié)論:
- Student關(guān)系模式不是一個(gè)好的模式。
- “好”的模式:
不會(huì)發(fā)生插入異常、刪除異常、更新異常,數(shù)據(jù)冗余應(yīng)盡可能少 - 原因:由存在于模式中的某些數(shù)據(jù)依賴引起的
- 解決方法:通過(guò)分解關(guān)系模式來(lái)消除其中不合適 的數(shù)據(jù)依賴
可以把這個(gè)單一模式分成3個(gè)關(guān)系模式:
- S(Sno,Sdept,Sno → Sdept);
- SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
- DEPT(Sdept,Mname,Sdept→ Mname)
這三個(gè)模式都不會(huì)發(fā)生插入異常、刪除異常的問(wèn)題,數(shù)據(jù)的冗余也得到了控制。
一個(gè)模式的數(shù)據(jù)依賴會(huì)有哪些不好的性質(zhì),如何改造一個(gè)不好的模式,這就是接下來(lái)2.規(guī)范化要討論的內(nèi)容。
2.規(guī)范化—改造關(guān)系模式,解決插入異常、刪除異常、更新異常和數(shù)據(jù)冗余問(wèn)題。
(1)規(guī)范化研究什么?
- 規(guī)范化討論如何根據(jù)屬性間依賴情況來(lái)判定關(guān)系是否具有某些不合適的性質(zhì)
- 通常按屬性間依賴情況來(lái)區(qū)分關(guān)系規(guī)范化程度為第一范式、第二范式、第三范式和第四范式等
- 用來(lái)改造關(guān)系模式,通過(guò)分解關(guān)系模式來(lái)消除其中不合適的數(shù)據(jù)依賴,以解決插入異常、刪除異常、更新異常和數(shù)據(jù)冗余問(wèn)題。
接下來(lái)我們依次學(xué)習(xí)以下內(nèi)容,來(lái)更好的掌握規(guī)范化理論,來(lái)更好的設(shè)計(jì)表的結(jié)構(gòu),設(shè)計(jì)關(guān)系模式。
- 函數(shù)依賴
- 碼
- 范式
- 2NF
- 3NF
- BCNF
- 多值依賴
- 4NF
其中函數(shù)依賴、碼是為了學(xué)習(xí)范式、1NF,2NF,3NF……打基礎(chǔ)
(2)函數(shù)依賴
這里我們討論數(shù)據(jù)依賴F中的函數(shù)依賴,分為以下幾種類型:
- 函數(shù)依賴
- 平凡函數(shù)依賴與非平凡函數(shù)依賴
- 完全函數(shù)依賴與部分函數(shù)依賴
- 傳遞函數(shù)依賴
① 函數(shù)依賴
注意:函數(shù)依賴不是指關(guān)系模式R的某個(gè)或某些關(guān)系滿足的約束條件,而是指R的一切關(guān)系均要滿足的約束條件。
以下是一個(gè)錯(cuò)誤的例子:
sno->sdept,sno應(yīng)該唯一決定sdept
函數(shù)依賴和別的數(shù)據(jù)依賴樣是語(yǔ)義范疇的概念,只能根據(jù)語(yǔ)義來(lái)確定一個(gè)函數(shù)依賴。
例如,姓名→年齡這個(gè)函數(shù)依賴只有在該部門沒有同名人的條件下成立。如果允許有同名人,則年齡就不再函數(shù)依賴于姓名了。
② 平凡函數(shù)依賴與非平凡函數(shù)依賴
③ 完全函數(shù)依賴與部分函數(shù)依賴
④ 傳遞函數(shù)依賴
直接依賴這里我們舉個(gè)例子:
BH(sno,idCard,address)
X:sno 學(xué)號(hào)
Y:idCard 身份證號(hào)
Z:address 住址
X->Y,Y->X,X<->Y,Y->Z
所以我們說(shuō)Z直接依賴于X
(3)碼
- 碼是關(guān)系模式中的一個(gè)重要概念。在 碼的定義中有關(guān)碼的若干定義, 這里用函數(shù)依賴的概念來(lái)定義碼。
- 碼唯一決定一個(gè)實(shí)體集
① 候選碼、超碼、主碼
② 主屬性和非主屬性
主屬性與非主屬性
- 包含在任何一個(gè)候選碼中的屬性 ,稱為主屬性(Prime attribute)
- 不包含在任何碼中的屬性稱為非主屬性(Nonprime attribute)或非碼屬性(Non-key attribute)
舉幾個(gè)例子:
[例2]
關(guān)系模式S(Sno,Sdept,Sage),單個(gè)屬性Sno是碼,
SC(Sno,Cno,Grade)中,(Sno,Cno)是碼
[例3]
關(guān)系模式R(P,W,A)
P:演奏者 W:作品 A:聽眾
一個(gè)演奏者可以演奏多個(gè)作品
某一作品可被多個(gè)演奏者演奏
聽眾可以欣賞不同演奏者的不同作品
碼為(P,W,A),即All-Key
③ 外部碼
(4)范式
- 范式是符合某一種級(jí)別的關(guān)系模式的集合
- 關(guān)系數(shù)據(jù)庫(kù)中的關(guān)系必須滿足一定的要求。滿足不同程度要求的為不同的范式。
- 級(jí)別越高,表設(shè)計(jì)的越合理
范式的種類:
各種范式之間存在聯(lián)系:
- 某一關(guān)系模式R為第n范式,可簡(jiǎn)記為R∈nNF。
一個(gè)低一級(jí)范式的關(guān)系模式,通過(guò)模式分解可以轉(zhuǎn)換為若干個(gè)高一級(jí)范式的關(guān)系模式的集合,這種過(guò)程就叫規(guī)范化
① 1NF
1NF的定義:
- 如果一個(gè)關(guān)系模式R的所有屬性都是不可分的基本數(shù)據(jù)項(xiàng),則R∈1NF
- 第一范式是對(duì)關(guān)系模式的最起碼的要求。不滿足第一范式的數(shù)據(jù)庫(kù)模式不能稱為關(guān)系數(shù)據(jù)庫(kù)
- 但是滿足第一范式的關(guān)系模式并不一定是一個(gè)好的關(guān)系模式
以下是一個(gè)滿足1NF,但不是好的關(guān)系模式的例子:
關(guān)系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade)
Sloc為學(xué)生住處,假設(shè)每個(gè)系的學(xué)生住在同一個(gè)地方
- 這個(gè)例子中存在函數(shù)依賴,不是一個(gè)好的關(guān)系模式
圖形化表示:
S-L-C不是一個(gè)好的關(guān)系模式,一個(gè)關(guān)系模式 R不屬于2NF,就會(huì)產(chǎn)生以下幾個(gè)問(wèn)題:
- (1)插入異常。假若要插入一個(gè)學(xué)生Sno=S7, Sdept =PHY, Sloc =BLD2, 但該生還未選課,即這個(gè)學(xué)生無(wú)Cno,這樣的元組就插不進(jìn)S-L-C中。因?yàn)椴迦朐M時(shí)必須給定碼值,而這時(shí)碼值的一部分 為空,因而學(xué)生的固有信息無(wú)法插入。
- (2)刪除異常。假定某個(gè)學(xué)生只選一門課,如S4就選了一門課C3,現(xiàn)在C3這門課他也不選了,那么C3這個(gè)數(shù)據(jù)項(xiàng)就要?jiǎng)h除。而C3是主屬性,刪除了C3,整個(gè)元組就必須一起刪除,使得S4的其他信息也被刪除了,從而造成刪除異常,即不應(yīng)刪除的信息也刪除了。
- (3)修改復(fù)雜。某個(gè)學(xué)生從數(shù)學(xué)系(MA)轉(zhuǎn)到計(jì)算機(jī)科學(xué)系(CS),這本來(lái)只需修改此學(xué)生元組中的Sdept分量即可,但因?yàn)殛P(guān)系模式S-L-C中還含有系的住處Sloc屬性,學(xué)生轉(zhuǎn)系將同時(shí)改變住處,因而還必須修改元組中的Sloc分量。另外,如果這個(gè)學(xué)生選修了k門課,Sdept、 Sloc重復(fù)存儲(chǔ)了k次,不僅存儲(chǔ)冗余度大,而且必須無(wú)遺漏地修改k個(gè)元組中全部Sdept、Sloc 信息,造成修改的復(fù)雜化。
為什么會(huì)有這些問(wèn)題呢?
- 原因:
Sdept、 Sloc部分函數(shù)依賴于碼。 - 解決方法(也就是2NF的處理方法)
S-L-C分解為兩個(gè)關(guān)系模式,以消除這些部分函數(shù)依賴
SC(Sno, Cno, Grade)
S-L(Sno, Sdept, Sloc)
② 2NF
-
采用投影分解法將一個(gè)1NF的關(guān)系分解為多個(gè)2NF的關(guān)系,可以在一定程度上減輕原1NF關(guān)系中存在的插入異常、刪除異常、數(shù)據(jù)冗余度大、修改復(fù)雜等問(wèn)題。
-
將一個(gè)1NF關(guān)系分解為多個(gè)2NF的關(guān)系,并不能完全消除關(guān)系模式中的各種異常情況和數(shù)據(jù)冗余。所以又引入了3NF。
③ 3NF
這里我們對(duì)上面的2NF例子再次進(jìn)行剖析:
解決方法:
- 采用投影分解法,把S-L分解為兩個(gè)關(guān)系模式,以消除傳遞函數(shù)依賴:
S-D(Sno, Sdept)
D-L(Sdept,Sloc) - S-D的碼為Sno, D-L的碼為Sdept。
- 分解后的關(guān)系模式S-D與D-L中不再存在傳遞依賴
-
采用投影分解法將一個(gè)2NF的關(guān)系分解為多個(gè)3NF的關(guān)系,可以在一定程度上解決原2NF關(guān)系中存在的插入異常、刪除異常、數(shù)據(jù)冗余度大、修改復(fù)雜等問(wèn)題。
-
將一個(gè)2NF關(guān)系分解為多個(gè)3NF的關(guān)系后,仍然不能完全消除關(guān)系模式中的各種異常情況和數(shù)據(jù)冗余。
④ BCNF
BCNF ( Boyce Codd Normal Form)是由Boyce與Codd提出的,比上述的3NF又進(jìn)了一步,通常認(rèn)為BCNF是修正的第三范式,有時(shí)也稱為擴(kuò)充的第三范式。
下面用幾個(gè)例子說(shuō)明屬于3NF的關(guān)系模式有的屬于BCNF,但有的不屬于BCNF。
[例5] 關(guān)系模式C(Cno,Cname,Pcno)
C∈3NF
C∈BCNF
關(guān)系模式C(Cno, Cname, Peno), 它只有一個(gè)碼Cno, 這里沒有任何屬性對(duì)Cno部分依賴或傳遞依賴,所以C∈3NF。同時(shí)C中Cno是唯一的決定因素, 所以C ∈BCNF。
[例6]關(guān)系模式S(Sno, Sname, Sdept, Sage)
假定S有兩個(gè)碼Sno,Sname
S∈3NF。
S ∈ BCNF
假定Sname也具有唯一性, 那么S就有兩個(gè)碼,這兩個(gè)碼都由單個(gè)屬性組成,彼此不相交。其他屬性不存在對(duì)碼的傳遞依賴與部分依賴,所以S∈3NF。
同時(shí)S中除Sno、Sname外沒有其他決定因素,所以S也屬于BCNF。
[例7]關(guān)系模式SJP(S,J,P)
SJP∈3NF,
SJP∈BCNF
[例6.7]關(guān)系模式SJP(S, J, P)中,S是學(xué)生,J表示課程,P表示名次。
每一個(gè)學(xué)生選修每門課程的成績(jī)有一定的名次,
每門課程中每一名次只有一個(gè) 學(xué)生(即沒有并列名次)。
由語(yǔ)義可得到下面的函數(shù)依賴:
(S,J)→P; (J,P)→S
所以(S,J) 與(J,P)都可以作為候選碼。
這兩個(gè)碼各由兩個(gè)屬性組成,而且它們是相交的。
這個(gè)關(guān)系模式中顯然沒有屬性對(duì)碼傳遞依賴或部分依賴。
所以SJP∈3NF,而且除(S,J)與(J,P)以外沒有其他決定因素,所以SJP∈BCNF。
[例8] 關(guān)系模式STJ(S, T, J)中,S表示學(xué)生,T表示教師,J表示課程。
每一教師只教一門課,
每門課有若干教師,
某一學(xué)生選定某門課, 就對(duì)應(yīng)一個(gè)固定的教師。
由語(yǔ)義可得到如下的函數(shù)依賴。
(S,J)→T,(S,T)-J, T→J
函數(shù)依賴關(guān)系可以用如圖表示
這里(S,J)、 (S,T)都是候選碼。
STJ是3NF,因?yàn)闆]有任何非主屬性對(duì)碼傳遞依賴或部分依賴,
但STJ不是BCNF關(guān)系,因?yàn)門是決定因素,而T不包含碼。
如何解決才能讓STJ是BCNF關(guān)系呢?
⑤ 3NF與BCNF的關(guān)系
- 3NF和BCNF是在函數(shù)依賴的條件下對(duì)模式分解所能達(dá)到的分離程度的測(cè)度。
- 一個(gè)模式中的關(guān)系模式如果都屬于BCNF,那么在函數(shù)依賴范疇內(nèi)它已實(shí)現(xiàn)了徹底的分離,已消除了插入和刪除的異常。
- 3NF的“不徹底”性表現(xiàn)在可能存在主屬性對(duì)碼的部分依賴和傳遞依賴。
(5)多值依賴
- 前面我們講了數(shù)據(jù)依賴分為函數(shù)依賴和多值依賴,函數(shù)依賴在上面已經(jīng)敘述了,這里我們?cè)儆懻摱嘀狄蕾嚒?/li>
用一個(gè)例子引入多值依賴:
[例9] 學(xué)校中某一門課程由多個(gè)教師講授,他們使用相同的一套參考書。每個(gè)教員可以講授多門課程,每種參考書可以供多門課程使用。
可以用一個(gè)非規(guī)范化的關(guān)系來(lái)表示教師T、課程C和參考書B之間的關(guān)系
把這張表變成一張規(guī)范化的二維表:
-
關(guān)系模型Teaching (C, T,B)的碼是(C, T, B),即all-key,因而Teaching∈BCNF。
-
但是當(dāng)某一課程(如物理)增加一名講課教師(如周英)時(shí),必須插入多個(gè)(這里是三個(gè))元組:
(物理,周英,普通物理學(xué)),(物理,周英,光學(xué)原理),(物理,周英,物理習(xí)題集)。 -
同樣,某一門課(如數(shù)學(xué))要去掉一本參考書(如微分方程),則必須刪除多個(gè)(這里是兩個(gè))元組:
(數(shù)學(xué),李勇,微分方程),(數(shù)學(xué),張平,微分方程)。 -
可以看出對(duì)數(shù)據(jù)的增刪改很不方便,數(shù)據(jù)的冗余也十分明顯。
-
仔細(xì)考察這類關(guān)系模式,發(fā)現(xiàn)它具有一種稱之為多值依賴(Multi-Valued Dependency, MVD)的數(shù)據(jù)依賴。
① 多值依賴的定義
例如,在關(guān)系模式Teaching中,對(duì)于一個(gè)(物理,光學(xué)原理)有一組T值{李勇,王軍},這組值僅僅決定于課程C上的值(物理)。
也就是說(shuō)對(duì)于另一個(gè)(物理,普通物理學(xué)),它對(duì)應(yīng)的一組T值仍是{李勇,王軍},盡管這時(shí)參考書B的值已經(jīng)改變了。
因此T多值依賴于C,即C→→T。
② 平凡多值依賴和非平凡多值依賴
下面再舉一個(gè)具有多值依賴的關(guān)系模式的例子。
- 對(duì)于W的每一個(gè)值Wi, S有一個(gè)完整的集合與之對(duì)應(yīng)而不問(wèn)C取何值。所以W→→S(多值依賴)。
如果用圖下圖來(lái)表示這種對(duì)應(yīng)
- 則對(duì)應(yīng)W的某一個(gè)值Wi的全部S值記作{S}wi (表示此倉(cāng)庫(kù)工作的全部保管員)
- 全部C值記作{C}wi (表示在此倉(cāng)庫(kù)中存放的所有商品)。
- 應(yīng)當(dāng)有{S}wi中的每一個(gè)值和{C}wi中的每一個(gè)C值對(duì)應(yīng)。
- 于是{S}wi與{C}wi之間正好形成一個(gè)完全二分圖,因而W→→S。
- 由于C與S的完全對(duì)稱性,必然有W→→C成立。
多值依賴具有以下性質(zhì):
③ 多值依賴與函數(shù)依賴的區(qū)別
(6)4NF
(7)規(guī)范化小結(jié)—重點(diǎn)歸納步驟
-
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化理論是數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)的工具
-
目的:盡量消除插入、刪除異常,修改復(fù)雜,數(shù)據(jù)冗余
-
基本思想:逐步消除數(shù)據(jù)依賴中不合適的部分
實(shí)質(zhì):·概念的單一化·
關(guān)系模式規(guī)范化的基本步驟:
參考:《數(shù)據(jù)庫(kù)系統(tǒng)概論第五版》—王珊
總結(jié)
以上是生活随笔為你收集整理的6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Object与equals
- 下一篇: 5.1.1 什么是I/O设备?有几类I/