第5章數據庫表的規(guī)范化_第1頁
第5章數據庫表的規(guī)范化_第2頁
第5章數據庫表的規(guī)范化_第3頁
第5章數據庫表的規(guī)范化_第4頁
第5章數據庫表的規(guī)范化_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、主要學習內容主要學習內容 - 什么是規(guī)范化,以及它在數據庫設計中的作用 - 范式1NF、 2NF、 3NF - 范式如何從低范式轉換為高范式 - 規(guī)范化和ER建模被同時用來生成優(yōu)秀的數據庫設計 - 要求非規(guī)范化以有效生成信息的情況 第第5章章 數據庫表的規(guī)范化數據庫表的規(guī)范化 5.1 數據表和規(guī)范化數據表和規(guī)范化表是數據庫設計過程中的基本構件。規(guī)范化(normalization)是估算并校正表結構以使數據冗余最小化的過程,它可以幫助消除數據異常。規(guī)范化通過叫做“范式”的一組平臺進行工作。前3個平臺記述為第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。從結構的觀點來看,2NF優(yōu)于1N

2、F,而3NF優(yōu)于2NF。出于大多數商務數據庫設計目的考慮,在規(guī)范化過程中對3NF的需要最多。實際應用中會涉及規(guī)范化和非規(guī)范化的權衡。 5.1 數據表和規(guī)范化數據表和規(guī)范化 規(guī)范化需要規(guī)范化需要 5.1.1 數據表和規(guī)范化數據表和規(guī)范化 規(guī)范化需要規(guī)范化需要 續(xù)續(xù)報表中的總費用為派生值,它沒必要存儲在數據表中。 5.1.1 數據表和規(guī)范化數據表和規(guī)范化 規(guī)范化需要規(guī)范化需要 續(xù)續(xù) 但該表與關系數據庫要求不符合,而且在數據處理方面做的不好: 主鍵標包括空值 表項目引起數據不一致。例如,可以將JOB_CLASS值“Elect. Engineer”輸入為“Elect. Eng”。 表顯示了數據冗余。從

3、而生成了下面的異常: 更新異常 插入異常 刪除異常 5.1.2 數據表和規(guī)范化數據表和規(guī)范化 轉換為第一范式轉換為第一范式步驟步驟1:消除重復組:消除重復組 先從介紹表格式中的數據開始,在表格式中,每個單元格都有單個值,而且沒有重復組。為了消除重復組,通過確保每一個重復組屬性包括一個合適的數據值來消除空值。步驟步驟2:標識鍵標:標識鍵標 為了保持惟一標識任何屬性值的正確的主鍵標,新鍵標必須由PROJ_NUM和EMP_NUM的組合組成步驟步驟3:標識所有依賴,:標識所有依賴,步驟2中PK的標識意味著你已經標識了下面的依賴: PROJ_NUM,EMP_NUM PROJ_NAME,EMP_NAME,

4、 JOB_CLASS,CHG_HOUR,HOURS PROJ_NUM PROJ_NAME 5.1.2 數據表和規(guī)范化數據表和規(guī)范化 轉換為第一范式轉換為第一范式PRJ_NUM PRJ_NAME EMP_NUM EMP_NAMEJOB_CLASSCHG_HOURHOURS部分依賴部分依賴傳遞依賴 5.1.2 數據表和規(guī)范化數據表和規(guī)范化 轉換為第一范式轉換為第一范式 續(xù)續(xù)部分依賴(partial dependencies):只基于復合主鍵標的一部分的依賴。傳遞依賴(transitive dependency):一個非主屬性對于另一個非主屬性的依賴 依賴圖(依賴圖(dependency diagr

5、am) 5.1.2 數據表和規(guī)范化數據表和規(guī)范化 轉換為第一范式轉換為第一范式 續(xù)續(xù)術語術語1NF(第一范式,(第一范式,first normal form)描述了表格式,在表格式中:定義了所有鍵標屬性。表中沒有重復組。換句話說,每一行/列插入僅可以包括一個值,而不是一組值。所有屬性都依賴于主鍵標。所有的關系表都滿足1NF,該范式的問題是包括了部分依賴,也就是說,只基于鍵標一部分的依賴。 1NF到到2NF的轉換很簡單:從上圖所示的的轉換很簡單:從上圖所示的1NF格式開始,格式開始,完成下面的步驟:完成下面的步驟:步驟步驟1:標識所有鍵標組件:標識所有鍵標組件PROJ_NUMEMP_NUMPRO

6、J_NUM EMP_NUM 每一個組件將成為新表中的鍵標。換句話說,原始表現在分成了3個表。我們把這些表分別叫做PROJECT,EMPLOYEE和ASSIGN。步驟步驟2:標識依賴屬性:標識依賴屬性 3個新表PROJECT,EMPLOYEE和ASSIGN可以描述如下: PROJECT(PROJ_NUM,PROJ_NAME) EMPLOYEE(EMP_NUM,EMP_NAME,JOB_CLASS,CHG_HOUR) ASSIGN(PROJ_NUM,EMP_NUM,ASSIGN_HOURS) 5.1.3 數據表和規(guī)范化數據表和規(guī)范化 轉換為第二范式轉換為第二范式 PRJ_NUM PRJ_NAMEE

7、MP_NUM EMP_NAMEJOB_CLASSCHG_HOURASSIGN_HOURS傳遞依賴 5.1.3 數據表和規(guī)范化數據表和規(guī)范化 轉換為第二范式轉換為第二范式 續(xù)續(xù) 表名:PROJECTEMP_NUM PRJ_NUM表名:EMPLOYEE表名:ASSIGN 5.1.3 數據表和規(guī)范化數據表和規(guī)范化 轉換為第二范式轉換為第二范式 續(xù)續(xù) 術語術語2NF(第二范式,(第二范式,second normal form):):它屬于1NF。它不包括部分依賴;也就是說,沒有屬性只依賴于主鍵標的一部分 由于只有表的主鍵標由幾個屬性組成時,部分依賴才存在,所以主鍵標只有單個屬性組成的表屬于1NF,那么

8、他就自動屬于2NF。 屬于2NF的表仍可能顯示出傳遞依賴;也就是說,一個或多個屬性可以在功能上依賴于非鍵標屬性。 5.1.4 數據表和規(guī)范化數據表和規(guī)范化 轉換為第三范式轉換為第三范式 通過完成下面的通過完成下面的3個步驟,可以很容易地消除由圖個步驟,可以很容易地消除由圖5-4中中所示的數據庫體系結構引起的數據異常:所示的數據庫體系結構引起的數據異常:步驟步驟1:標識每一個新的行列式(:標識每一個新的行列式(determinant) 對于每一個傳遞依賴,將它的行列式寫為新表的PK(行列式是它的值確定行中其他值的任何屬性) 步驟2:標識依賴屬性, 標識依賴于步驟1中所標識的每一個行列式的屬性,并

9、標識依賴。在本例中,寫為:JOB_CLASS CHG_HOUR,命名表來反映它的內容和功能。在本例中,JOB似乎是合適的。步驟步驟3:從傳遞依賴中消除依賴屬性:從傳遞依賴中消除依賴屬性 從具有這樣的傳遞關系的每一個表中消除傳遞關系(一個或多個)中的所有依賴屬性。 PRJ_NUM PRJ_NAMEEMP_NUM EMP_NAMEJOB_CLASSASSIGN_HOURS 5.1.4 數據表和規(guī)范化數據表和規(guī)范化 轉換為第三范式轉換為第三范式 續(xù)續(xù) 表名:PROJECTEMP_NUM PRJ_NUM表名:EMPLOYEE表名:ASSIGNJOB_CLASSCHG_HOUR表名:JOB 5.1.4

10、數據表和規(guī)范化數據表和規(guī)范化 轉換為第三范式轉換為第三范式 續(xù)續(xù) 術語術語3NF(第三范式,(第三范式,third normal form):):它屬于2NF。它不包括傳遞依賴。 5.1.5 數據表和規(guī)范化數據表和規(guī)范化 改進的設計改進的設計 依靠規(guī)范化我們消除了數據冗余,但是我們不能僅僅依賴規(guī)范化做出好的設計,現在我們來看看如何在規(guī)范化的基礎上提高數據庫的操作性能和提供數據的能力。PK分配分配命名約定命名約定屬性原子性屬性原子性添加屬性添加屬性精制精制PKPRJ_NUM PRJ_NAME表名:PROJECTPRJ_NUM PRJ_NAME表名:PROJECTJOB_DESCRIPTIONJO

11、B_CHG_HOUR表名:JOBEMP_NUMJOB_CODEJOB_CLASSCHG_HOUR表名:JOB PK分配分配 命名約定命名約定 添加屬性添加屬性 5.1.5 數據表和規(guī)范化數據表和規(guī)范化 改進的設計改進的設計PRJ_NUM PRJ_NAME表名:PROJECTJOB_DESCRIPTIONJOB_CHG_HOUR表名:JOBEMP_NUMJOB_CODE 5.1.5 數據表和規(guī)范化數據表和規(guī)范化 改進的設計改進的設計 續(xù)續(xù)EMP_NUM EMP_NAMEJOB_CLASS表名:EMPLOYEEEMP_HIREDATEEMP_FNAMEEMP_NUMEMP_LNAMEEMP_INI

12、TIALJOB_CODE 命名的原子性命名的原子性 添加屬性添加屬性 5.1.5 數據表和規(guī)范化數據表和規(guī)范化 改進的設計改進的設計 續(xù)續(xù) 5.1.5 數據表和規(guī)范化數據表和規(guī)范化 改進的設計改進的設計 續(xù)續(xù)ASSIGN_HOURSPRJ_NUMASSIGN_NUMASSIGN_DATEEMP_NUMASSIGN_HOURSEMP_NUM PRJ_NUM表名:ASSIGN 精制精制PK 5.1.5 數據表和規(guī)范化數據表和規(guī)范化 改進的設計改進的設計 續(xù)續(xù) 5.2 規(guī)范化和數據庫設計規(guī)范化和數據庫設計 為了確解說明規(guī)范化在設計過程中的作用,我們從概念設計的角度說明建筑公司簡單業(yè)務的數據庫設計過程

13、 . 商務規(guī)則: 公司管理很多工程。 每一個工程要求很多雇員。 一個雇員可以分配到幾個不同的工程。 一些雇員沒有分配到工程處,而且執(zhí)行與工程不是特別相關的任務。一些雇員是勞動供應源的一部分,所有工程組都需要他們的服務工作。例如,公司的管理文書不分配到任何一個具體的工程。 每一個雇員具有一個(單個)主要的工作種類。這個工作種類決定每小時開單率。 很多雇員的工作種類可能相同。例如公司雇用一個以上的電工。 5.3 非規(guī)范化非規(guī)范化 盡管規(guī)范化關系的創(chuàng)建是很重要的數據庫設計目標,但它只是很多這樣的目標中的一個。優(yōu)秀的數據庫設計還要考慮處理要求。當分解表來符合規(guī)范化要求時,數據庫表的數量增加。加入更多數量的表占用了額外的磁盤輸入/輸出(I/O)操作和處理邏輯,因此減慢了系統(tǒng)速度。為了加快處

溫馨提示

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

評論

0/150

提交評論