數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式應(yīng)用實(shí)例剖析_第1頁(yè)
數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式應(yīng)用實(shí)例剖析_第2頁(yè)
數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式應(yīng)用實(shí)例剖析_第3頁(yè)
數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式應(yīng)用實(shí)例剖析_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式應(yīng)用實(shí)例剖析數(shù)據(jù)庫(kù)的設(shè)計(jì)范式是設(shè)計(jì)數(shù)據(jù)庫(kù)所需要滿足的規(guī)范,滿足這些規(guī)范的數(shù)據(jù)庫(kù)是簡(jiǎn)潔的、結(jié)構(gòu)明晰的,同時(shí),不會(huì)發(fā)生插入(Insert)、刪除(Delete)和更新(Update)操作異常。反之則不僅容易給數(shù)據(jù)庫(kù)的編程人員制造麻煩,而且也可能會(huì)存儲(chǔ)大量不需要的冗余信息。 一、 范式說(shuō)明 1.第一范式(1NF) 數(shù)據(jù)庫(kù)表中的字段都是單一屬性的,不可再分。這個(gè)單一屬性由基本類型構(gòu)成,包括整型、文本型、邏輯型、日期型等。 例如,如下的數(shù)據(jù)庫(kù)表是符合第一范式的: 字段1字段2 字段3 字段4     而這樣的數(shù)據(jù)庫(kù)表是不符合第一范式的: 字段1

2、字段2 字段3 字段4   字段3.1 字段3.2   很顯然,在當(dāng)前的任何關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)中,不可能做出不符合第一范式的數(shù)據(jù)庫(kù),因?yàn)檫@些DBMS不允許你把數(shù)據(jù)庫(kù)表的一列再分成兩列或多列。因此,你想在現(xiàn)有的RDBMS中設(shè)計(jì)出不符合第一范式的數(shù)據(jù)庫(kù)都是不可能的。 2.第二范式(2NF) 數(shù)據(jù)庫(kù)表中不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的部分函數(shù)依賴(部分函數(shù)依賴指的是存在組合關(guān)鍵字中的某些字段決定非關(guān)鍵字段的情況),也即所有非關(guān)鍵字段都完全依賴于任意一組候選關(guān)鍵字。 假定選課關(guān)系表為SelectCourse(學(xué)號(hào), 姓名, 年齡, 課程名稱, 成績(jī),

3、學(xué)分),關(guān)鍵字為組合關(guān)鍵字(學(xué)號(hào), 課程名稱),因?yàn)榇嬖谌缦聸Q定關(guān)系: (學(xué)號(hào), 課程名稱) (姓名, 年齡, 成績(jī), 學(xué)分) 這個(gè)數(shù)據(jù)庫(kù)表不滿足第二范式,因?yàn)榇嬖谌缦聸Q定關(guān)系: (課程名稱) (學(xué)分) (學(xué)號(hào)) (姓名, 年齡) 即存在組合關(guān)鍵字中的字段決定非關(guān)鍵字的情況。 由于不符合2NF,這個(gè)選課關(guān)系表會(huì)存在如下問題。 (1) 數(shù)據(jù)冗余。 同一門課程由n個(gè)學(xué)生選修,“學(xué)分”就重復(fù)n-1次;同一個(gè)學(xué)生選修了m門課程,“姓名”和“年齡”就重復(fù)了m-1次。 (2) 更新異常。 若調(diào)整了某門課程的學(xué)分,數(shù)據(jù)表中所有行的“學(xué)分”值都要更新,否則會(huì)出現(xiàn)同一門課程學(xué)分不同的情況。 (3) 插入異常。

4、假設(shè)要開設(shè)一門新的課程,暫時(shí)還沒有人選修。這樣,由于還沒有“學(xué)號(hào)”關(guān)鍵字,課程名稱和學(xué)分也無(wú)法記錄入數(shù)據(jù)庫(kù)。(4) 刪除異常。 假設(shè)一批學(xué)生已經(jīng)完成課程的選修,這些選修記錄就應(yīng)該從數(shù)據(jù)庫(kù)表中刪除。但是,與此同時(shí),課程名稱和學(xué)分信息也被刪除了。很顯然,這也會(huì)導(dǎo)致插入異常。 把選課關(guān)系表SelectCourse改為如下三個(gè)表: 學(xué)生表:Student(學(xué)號(hào), 姓名, 年齡); 課程表:Course(課程名稱, 學(xué)分); 選課關(guān)系表:SelectCourse(學(xué)號(hào), 課程名稱, 成績(jī))。 這樣的數(shù)據(jù)庫(kù)表是符合第二范式的,消除了數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。 另外,所有單關(guān)鍵字的數(shù)據(jù)庫(kù)表都符

5、合第二范式,因?yàn)椴豢赡艽嬖诮M合關(guān)鍵字。 3.第三范式(3NF)在第二范式的基礎(chǔ)上,數(shù)據(jù)表中如果不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴,則符合第三范式。所謂傳遞函數(shù)依賴,指的是如果存在“A B C”的決定關(guān)系,則C傳遞函數(shù)依賴于A。因此,滿足第三范式的數(shù)據(jù)庫(kù)表應(yīng)該不存在如下依賴關(guān)系: 關(guān)鍵字段 非關(guān)鍵字段x 非關(guān)鍵字段y 假定學(xué)生關(guān)系表為Student(學(xué)號(hào), 姓名, 年齡, 所在學(xué)院, 學(xué)院地點(diǎn), 學(xué)院電話),關(guān)鍵字為單一關(guān)鍵字“學(xué)號(hào)”,因?yàn)榇嬖谌缦聸Q定關(guān)系: (學(xué)號(hào)) (姓名, 年齡, 所在學(xué)院, 學(xué)院地點(diǎn), 學(xué)院電話) 這個(gè)數(shù)據(jù)庫(kù)是符合2NF的,但是不符合3NF,因?yàn)榇嬖谌缦聸Q定

6、關(guān)系: (學(xué)號(hào)) (所在學(xué)院) (學(xué)院地點(diǎn), 學(xué)院電話) 即存在非關(guān)鍵字段“學(xué)院地點(diǎn)”、“學(xué)院電話”對(duì)關(guān)鍵字段“學(xué)號(hào)”的傳遞函數(shù)依賴。 它也會(huì)存在數(shù)據(jù)冗余、更新異常、插入異常和刪除異常的情況,讀者可自行分析。 把學(xué)生關(guān)系表分為如下兩個(gè)表: 學(xué)生表:Student(學(xué)號(hào), 姓名, 年齡, 所在學(xué)院); 學(xué)院表:College(學(xué)院, 地點(diǎn), 電話)。 這樣的數(shù)據(jù)庫(kù)表是符合第三范式的,消除了數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。 鮑依斯-科得范式(BCNF):在第三范式的基礎(chǔ)上,數(shù)據(jù)庫(kù)表中如果不存在任何字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴,則符合該范式。 假設(shè)倉(cāng)庫(kù)管理關(guān)系表為Storehouse

7、Manage(倉(cāng)庫(kù)ID,存儲(chǔ)物品ID, 管理員ID, 數(shù)量),且有一個(gè)管理員只在一個(gè)倉(cāng)庫(kù)工作;一個(gè)倉(cāng)庫(kù)可以存儲(chǔ)多種物品。這個(gè)數(shù)據(jù)庫(kù)表中存在如下決定關(guān)系: (倉(cāng)庫(kù)ID, 存儲(chǔ)物品ID) (管理員ID, 數(shù)量) (管理員ID, 存儲(chǔ)物品ID) (倉(cāng)庫(kù)ID, 數(shù)量) 所以,(倉(cāng)庫(kù)ID, 存儲(chǔ)物品ID)和(管理員ID, 存儲(chǔ)物品ID)都是StorehouseManage的候選關(guān)鍵字,表中的惟一非關(guān)鍵字段為數(shù)量,它是符合第三范式的。但是,由于存在如下決定關(guān)系: (倉(cāng)庫(kù)ID) (管理員ID) (管理員ID) (倉(cāng)庫(kù)ID) 即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以它不符合BCNF范式。它會(huì)出現(xiàn)如下異常情況:

8、(1) 刪除異常。 當(dāng)倉(cāng)庫(kù)被清空后,所有“存儲(chǔ)物品ID”和“數(shù)量”信息被刪除的同時(shí),“倉(cāng)庫(kù)ID”和“管理員ID”信息也被刪除了。 (2) 插入異常。 當(dāng)倉(cāng)庫(kù)沒有存儲(chǔ)任何物品時(shí),無(wú)法給倉(cāng)庫(kù)分配管理員。 (3) 更新異常。 如果倉(cāng)庫(kù)換了管理員,則表中所有行的管理員ID都要修改。 把倉(cāng)庫(kù)管理關(guān)系表分解為如下兩個(gè)關(guān)系表: 倉(cāng)庫(kù)管理表:Storehouse Manage(倉(cāng)庫(kù)ID, 管理員ID); 倉(cāng)庫(kù)表:Storehose(倉(cāng)庫(kù)ID, 存儲(chǔ)物品ID, 數(shù)量)。 這樣的數(shù)據(jù)庫(kù)表是符合BCNF范式的,消除了刪除異常、插入異常和更新異常。 二、范式應(yīng)用 我們來(lái)設(shè)計(jì)一個(gè)論壇的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)需要提供如下信息:

9、 (1)用戶:用戶名,email,主頁(yè),電話,聯(lián)系地址; (2)帖子:發(fā)帖標(biāo)題,發(fā)帖內(nèi)容,回復(fù)標(biāo)題,回復(fù)內(nèi)容。 第一次我們將數(shù)據(jù)庫(kù)的表結(jié)構(gòu)設(shè)計(jì)為如下所示的樣子: 用戶名 email 主頁(yè) 電話 聯(lián)系地址 發(fā)帖標(biāo)題 發(fā)帖內(nèi)容 回復(fù)標(biāo)題回復(fù)內(nèi)容 這個(gè)數(shù)據(jù)庫(kù)表符合第一范式,但是沒有任何一組候選關(guān)鍵字能決定數(shù)據(jù)庫(kù)表的整行,惟一的關(guān)鍵字段用戶名也不能完全決定整個(gè)元組。我們需要增加“發(fā)帖ID”、“回復(fù)ID”字段,即將表修改為: 用戶名 email 主頁(yè) 電話 聯(lián)系地址 發(fā)帖ID 發(fā)帖標(biāo)題 發(fā)帖內(nèi)容 回復(fù)ID 回復(fù)標(biāo)題 回復(fù)內(nèi)容 這樣數(shù)據(jù)表中的關(guān)鍵字(用戶名,發(fā)帖ID,回復(fù)ID)能決定整行,即: (用戶名,

10、發(fā)帖ID,回復(fù)ID) (email,主頁(yè),電話,聯(lián)系地址,發(fā)帖標(biāo)題,發(fā)帖內(nèi)容,回復(fù)標(biāo)題,回復(fù)內(nèi)容) 但是,這樣的設(shè)計(jì)不符合第二范式,因?yàn)榇嬖谌缦聸Q定關(guān)系: (用戶名) (email,主頁(yè),電話,聯(lián)系地址) (發(fā)帖ID) (發(fā)帖標(biāo)題,發(fā)帖內(nèi)容) (回復(fù)ID) (回復(fù)標(biāo)題,回復(fù)內(nèi)容) 即非關(guān)鍵字段部分函數(shù)依賴于候選關(guān)鍵字段,很明顯,這個(gè)設(shè)計(jì)會(huì)導(dǎo)致大量的數(shù)據(jù)冗余和操作異常。 我們將數(shù)據(jù)庫(kù)表繼續(xù)分解為如下所示的樣子(帶下劃線的為關(guān)鍵字): (1) 用戶信息表:用戶名,email,主頁(yè),電話,聯(lián)系地址; (2) 帖子信息表:發(fā)帖ID,標(biāo)題,內(nèi)容; (3) 回復(fù)信息表:回復(fù)ID,標(biāo)題,內(nèi)容。 (4) 發(fā)貼

11、表:用戶名,發(fā)帖ID; (5) 回復(fù)表:發(fā)帖ID,回復(fù)ID。 這樣的設(shè)計(jì)是滿足第一、二、三范式和BCNF范式要求的,但是這樣的設(shè)計(jì)是不是最好的呢?答案是:不一定。 觀察可知,第4項(xiàng)“發(fā)帖”中的“用戶名”和“發(fā)帖ID”之間是1:n的關(guān)系,因此我們可以把“發(fā)帖”合并到第2項(xiàng)的“帖子信息”中;第5項(xiàng)“回復(fù)”中的“發(fā)帖ID”和“回復(fù)ID”之間也是1:n的關(guān)系,因此我們可以把“回復(fù)”合并到第3項(xiàng)的“回復(fù)信息”中。這樣可以一定量地減少數(shù)據(jù)冗余,新的設(shè)計(jì)為: (1) 用戶信息表:用戶名,email,主頁(yè),電話,聯(lián)系地址; (2) 帖子信息表:用戶名,發(fā)帖ID,標(biāo)題,內(nèi)容; (3) 回復(fù)信息表:發(fā)帖ID,回復(fù)

12、ID,標(biāo)題,內(nèi)容。 數(shù)據(jù)庫(kù)表1顯然滿足所有范式的要求; 數(shù)據(jù)庫(kù)表2中存在非關(guān)鍵字段“標(biāo)題”、“內(nèi)容”對(duì)關(guān)鍵字段“發(fā)帖ID”的部分函數(shù)依賴,即不滿足第二范式的要求,但是這一設(shè)計(jì)并不會(huì)導(dǎo)致數(shù)據(jù)冗余和操作異常。 數(shù)據(jù)庫(kù)表3中也存在非關(guān)鍵字段“標(biāo)題”、“內(nèi)容”對(duì)關(guān)鍵字段“回復(fù)ID”的部分函數(shù)依賴,也不滿足第二范式的要求,但是與數(shù)據(jù)庫(kù)表2相似,這一設(shè)計(jì)也不會(huì)導(dǎo)致數(shù)據(jù)冗余和操作異常。 由此可以看出,并不一定要強(qiáng)行滿足范式的要求,對(duì)于1:n關(guān)系,當(dāng)1的一邊合并到n的那邊后,n的那邊就不再滿足第二范式了,但是這種設(shè)計(jì)反而比較好。 對(duì)于m:n的關(guān)系,不能將m一邊或n一邊合并到另一邊去,這樣會(huì)導(dǎo)致不符合范式要求,同時(shí)導(dǎo)致操作異常和數(shù)據(jù)冗余。 對(duì)于1:1的關(guān)系,我們可以將左邊的1或者右邊的1合并

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論