



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數據庫設計三大范式應用實例剖析數據庫的設計范式是設計數據庫所需要滿足的規范,滿足這些規范的數據庫是簡潔的、結構明晰的,同時,不會發生插入(Insert)、刪除(Delete)和更新(Update)操作異常。反之則不僅容易給數據庫的編程人員制造麻煩,而且也可能會存儲大量不需要的冗余信息。 一、 范式說明 1.第一范式(1NF) 數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、文本型、邏輯型、日期型等。 例如,如下的數據庫表是符合第一范式的: 字段1字段2 字段3 字段4 而這樣的數據庫表是不符合第一范式的: 字段1
2、字段2 字段3 字段4 字段3.1 字段3.2 很顯然,在當前的任何關系型數據庫管理系統(RDBMS)中,不可能做出不符合第一范式的數據庫,因為這些DBMS不允許你把數據庫表的一列再分成兩列或多列。因此,你想在現有的RDBMS中設計出不符合第一范式的數據庫都是不可能的。 2.第二范式(2NF) 數據庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴于任意一組候選關鍵字。 假定選課關系表為SelectCourse(學號, 姓名, 年齡, 課程名稱, 成績,
3、學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關系: (學號, 課程名稱) (姓名, 年齡, 成績, 學分) 這個數據庫表不滿足第二范式,因為存在如下決定關系: (課程名稱) (學分) (學號) (姓名, 年齡) 即存在組合關鍵字中的字段決定非關鍵字的情況。 由于不符合2NF,這個選課關系表會存在如下問題。 (1) 數據冗余。 同一門課程由n個學生選修,“學分”就重復n-1次;同一個學生選修了m門課程,“姓名”和“年齡”就重復了m-1次。 (2) 更新異常。 若調整了某門課程的學分,數據表中所有行的“學分”值都要更新,否則會出現同一門課程學分不同的情況。 (3) 插入異常。
4、假設要開設一門新的課程,暫時還沒有人選修。這樣,由于還沒有“學號”關鍵字,課程名稱和學分也無法記錄入數據庫。(4) 刪除異常。 假設一批學生已經完成課程的選修,這些選修記錄就應該從數據庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。 把選課關系表SelectCourse改為如下三個表: 學生表:Student(學號, 姓名, 年齡); 課程表:Course(課程名稱, 學分); 選課關系表:SelectCourse(學號, 課程名稱, 成績)。 這樣的數據庫表是符合第二范式的,消除了數據冗余、更新異常、插入異常和刪除異常。 另外,所有單關鍵字的數據庫表都符
5、合第二范式,因為不可能存在組合關鍵字。 3.第三范式(3NF)在第二范式的基礎上,數據表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴,則符合第三范式。所謂傳遞函數依賴,指的是如果存在“A B C”的決定關系,則C傳遞函數依賴于A。因此,滿足第三范式的數據庫表應該不存在如下依賴關系: 關鍵字段 非關鍵字段x 非關鍵字段y 假定學生關系表為Student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院電話),關鍵字為單一關鍵字“學號”,因為存在如下決定關系: (學號) (姓名, 年齡, 所在學院, 學院地點, 學院電話) 這個數據庫是符合2NF的,但是不符合3NF,因為存在如下決定
6、關系: (學號) (所在學院) (學院地點, 學院電話) 即存在非關鍵字段“學院地點”、“學院電話”對關鍵字段“學號”的傳遞函數依賴。 它也會存在數據冗余、更新異常、插入異常和刪除異常的情況,讀者可自行分析。 把學生關系表分為如下兩個表: 學生表:Student(學號, 姓名, 年齡, 所在學院); 學院表:College(學院, 地點, 電話)。 這樣的數據庫表是符合第三范式的,消除了數據冗余、更新異常、插入異常和刪除異常。 鮑依斯-科得范式(BCNF):在第三范式的基礎上,數據庫表中如果不存在任何字段對任一候選關鍵字段的傳遞函數依賴,則符合該范式。 假設倉庫管理關系表為Storehouse
7、Manage(倉庫ID,存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個數據庫表中存在如下決定關系: (倉庫ID, 存儲物品ID) (管理員ID, 數量) (管理員ID, 存儲物品ID) (倉庫ID, 數量) 所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的惟一非關鍵字段為數量,它是符合第三范式的。但是,由于存在如下決定關系: (倉庫ID) (管理員ID) (管理員ID) (倉庫ID) 即存在關鍵字段決定關鍵字段的情況,所以它不符合BCNF范式。它會出現如下異常情況:
8、(1) 刪除異常。 當倉庫被清空后,所有“存儲物品ID”和“數量”信息被刪除的同時,“倉庫ID”和“管理員ID”信息也被刪除了。 (2) 插入異常。 當倉庫沒有存儲任何物品時,無法給倉庫分配管理員。 (3) 更新異常。 如果倉庫換了管理員,則表中所有行的管理員ID都要修改。 把倉庫管理關系表分解為如下兩個關系表: 倉庫管理表:Storehouse Manage(倉庫ID, 管理員ID); 倉庫表:Storehose(倉庫ID, 存儲物品ID, 數量)。 這樣的數據庫表是符合BCNF范式的,消除了刪除異常、插入異常和更新異常。 二、范式應用 我們來設計一個論壇的數據庫,該數據庫需要提供如下信息:
9、 (1)用戶:用戶名,email,主頁,電話,聯系地址; (2)帖子:發帖標題,發帖內容,回復標題,回復內容。 第一次我們將數據庫的表結構設計為如下所示的樣子: 用戶名 email 主頁 電話 聯系地址 發帖標題 發帖內容 回復標題回復內容 這個數據庫表符合第一范式,但是沒有任何一組候選關鍵字能決定數據庫表的整行,惟一的關鍵字段用戶名也不能完全決定整個元組。我們需要增加“發帖ID”、“回復ID”字段,即將表修改為: 用戶名 email 主頁 電話 聯系地址 發帖ID 發帖標題 發帖內容 回復ID 回復標題 回復內容 這樣數據表中的關鍵字(用戶名,發帖ID,回復ID)能決定整行,即: (用戶名,
10、發帖ID,回復ID) (email,主頁,電話,聯系地址,發帖標題,發帖內容,回復標題,回復內容) 但是,這樣的設計不符合第二范式,因為存在如下決定關系: (用戶名) (email,主頁,電話,聯系地址) (發帖ID) (發帖標題,發帖內容) (回復ID) (回復標題,回復內容) 即非關鍵字段部分函數依賴于候選關鍵字段,很明顯,這個設計會導致大量的數據冗余和操作異常。 我們將數據庫表繼續分解為如下所示的樣子(帶下劃線的為關鍵字): (1) 用戶信息表:用戶名,email,主頁,電話,聯系地址; (2) 帖子信息表:發帖ID,標題,內容; (3) 回復信息表:回復ID,標題,內容。 (4) 發貼
11、表:用戶名,發帖ID; (5) 回復表:發帖ID,回復ID。 這樣的設計是滿足第一、二、三范式和BCNF范式要求的,但是這樣的設計是不是最好的呢?答案是:不一定。 觀察可知,第4項“發帖”中的“用戶名”和“發帖ID”之間是1:n的關系,因此我們可以把“發帖”合并到第2項的“帖子信息”中;第5項“回復”中的“發帖ID”和“回復ID”之間也是1:n的關系,因此我們可以把“回復”合并到第3項的“回復信息”中。這樣可以一定量地減少數據冗余,新的設計為: (1) 用戶信息表:用戶名,email,主頁,電話,聯系地址; (2) 帖子信息表:用戶名,發帖ID,標題,內容; (3) 回復信息表:發帖ID,回復
12、ID,標題,內容。 數據庫表1顯然滿足所有范式的要求; 數據庫表2中存在非關鍵字段“標題”、“內容”對關鍵字段“發帖ID”的部分函數依賴,即不滿足第二范式的要求,但是這一設計并不會導致數據冗余和操作異常。 數據庫表3中也存在非關鍵字段“標題”、“內容”對關鍵字段“回復ID”的部分函數依賴,也不滿足第二范式的要求,但是與數據庫表2相似,這一設計也不會導致數據冗余和操作異常。 由此可以看出,并不一定要強行滿足范式的要求,對于1:n關系,當1的一邊合并到n的那邊后,n的那邊就不再滿足第二范式了,但是這種設計反而比較好。 對于m:n的關系,不能將m一邊或n一邊合并到另一邊去,這樣會導致不符合范式要求,同時導致操作異常和數據冗余。 對于1:1的關系,我們可以將左邊的1或者右邊的1合并
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《商品基礎知識與養護技能》教案-教學設計 13其他因素于商品養護;14其他因素與商品養護-易碎、液體
- 中職英語單元測試卷 People and Events 含答案
- 金融風險管理控制體系搭建
- 金融機構的大數據服務模式創新
- 購物中心公共空間設計探討
- 公司開放書吧管理制度
- 基層司法工作管理制度
- 醫院公共節能管理制度
- 回收庫存日常管理制度
- 局信息化設備管理制度
- 1999年普通高等學校招生全國統一考試.文科數學試題及答案
- 國家開放大學2025年春《形勢與政策》形考任務1-5和大作業參考答案
- 安全生產 規章制度和安全操作規程
- 河南省洛陽市伊川縣2024-2025學年七年級下學期期中生物試題(含答案)
- 工人下班免責協議書
- 美術有趣的課件
- 健康活動:快樂生活的源泉
- 創業扶持政策對數字化轉型的影響研究試題及答案
- 產后出血的觀察及護理
- 2025-2030中國蘆筍行業市場發展趨勢與前景展望戰略研究報告
- 港口安全AI大模型自主研發的關鍵技術與應用研究
評論
0/150
提交評論