數據庫系統(三)--關係型數據庫規範化之範式

一 、關係模式可能會存在的問題: 

       1. 數據冗餘

     2. 更新異常  

     3. 插入異常

   4. 刪除異常

 

二、相關概念

  1、實體:現實世界中客觀存在並可以被區別的事物。這裏所說的“事物”不僅僅是看得見摸得着的“東西”,它也可以是虛擬的,比如說“老師與學校的關係”。

  2、屬性:實體所具有的某一特性。

  3、分量:元組的某個屬性值。在一個關係數據庫中,它是一個操作原子,即關係數據庫在做任何操作的時候,屬性是“不可分的”。否則就不是關係數據庫了。

  4、碼/鍵:表中可以唯一確定一個元組的某個屬性(或者屬性組)。

  5、候選碼或候選鍵:如果在關係的一個碼或鍵中,不能從中移去任何一個屬性,否則它就不是這個關係的碼或鍵。則稱這樣的碼或鍵爲該關係的候選碼或候選鍵。一個關係的候選碼或候選鍵是這個關係的最小超碼或超鍵。

  6、全碼/全鍵:如果一個碼包含了所有的屬性,這個碼就是全碼。

  7、主碼或主鍵:在一個關係的若干個候選碼或候選鍵中指定一個用來唯一標識關係的元組,則 稱這個被指定的候選碼或候選鍵爲該關係的主碼或主鍵。

  8、主屬性:一個屬性只要在任何一個候選碼中出現過,這個屬性就是主屬性。

  9、非主屬性:與主屬性相反,沒有在任何候選碼中出現過,這個屬性就是非主屬性。

  10、外碼/外鍵:一個屬性(或屬性組),它不是碼,但是它別的表的碼,它就是外碼。

  11、域:域表示屬性的取值範圍。

  12、參照關係: 參照關係也稱爲從關係,被參照關係也稱爲主關係,它們是指以外碼相關聯的兩個關係。外碼所在的關係稱爲參照關係。

  13、被參照關係:以外碼作爲主碼的關係稱爲被參照關係;被參照關係與參照關係是通過外碼相聯繫的,這種聯繫通常是一對多的 聯繫。

    14、關係模式:同數據模型一樣,數據庫也有型和值之分。在關係數據庫中,關係模式是型, 關係是值,即關係模式是對關係的描述。關係模式是靜態的、穩定的,而關係是動態的、隨時間不斷變化的。這是因爲關係操作在不斷地更新着數據庫中的數據。 人們常常會把關係模式和關係都籠統地稱爲關係。

    15、函數依賴:指關係中屬性間的對應關係。  設 R 爲任一給定關係,如果對於 R 中屬性 X 的每一個值,R 中的屬性 Y 只有唯一值與之對應,則稱 X 函數決定 Y 或稱 Y 函數依賴於 X,記作 X→ Y。其中 X 稱爲決定因素。 或 設X,Y是關係R的兩個屬性集合,當任何時刻R中的任意兩個元組中的X屬性值相同時,則它們的Y屬性值也相同,則稱X函數決定Y,或Y函數依賴於X。

      16、 完全函數依賴:設 R 爲任一給定關係,X、Y 爲其屬性集,若 X→Y,且對 X 中的任何真子集 X ,都有 X ,Y,則稱 Y 完全函數依賴於 X。

      17、部分函數依賴: 設 R 爲任一給定關係,X、Y 爲其屬性集,若 X→Y,且 X 中存在一個真子集 X ,滿足 X →Y,則稱 Y 部分函數依賴於 X。

      18、傳遞函數依賴:設 R 爲任一給定關係,X、Y、Z 爲其不同屬性子集,若 X→Y,Y X,Y→Z,則有 X→Z,稱爲 Z 傳遞函數依賴於 X。 知識點五 定義 2.5 關鍵字的定義 定義 2.5 設 R 爲任一給定關係,U 爲其所含的全部屬性集合,X 爲 U 的子集, 若有完全函數依賴 X→U,則 X 爲 R 的一個候選關鍵字。

  19、數據依賴:在計算機科學中,數據依賴是指一種狀態,當程序結構導致數據引用之前處理過的數據時的狀態。其中最重要的是函數依賴和多值依賴。

  20、平凡函數依賴:當關系中屬性集合Y是屬性集合X的子集時(Y?X),存在函數依賴X→Y,即一組屬性函數決定它的所有子集,這種函數依賴稱爲平凡函數依賴。

  21、非平凡函數依賴 、:當關系中屬性集合Y不是屬性集合X的子集時,存在函數依賴X→Y,則稱這種函數依賴爲非平凡函數依賴。

  22、多值依賴:設R(U)是屬性集U上的一個關係模式。X,Y,Z是U的子集,並且Z=U-X-Y。關係模式R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關係r,給定的一對(x,z)值有一組Y的值,這組值僅僅決定於x值而與z值無關。 平凡的多值依賴與非平凡的多值依賴: 若X→→Y,而Z爲空集,則稱X→→Y爲平凡的多值依賴;若Z不爲空,則稱其爲非平凡的多值依賴。 

 

三、範式

  0、基礎概念

     範式:即在關係型數據庫中定義規範(優化數據數據存儲方式、數據的存儲性能等)就可以稱爲範式。

  規範化:一個低一級範式的關係模式通過模式分解可以轉換爲若干個高一級範式的關係 模式的集合,這種過程就叫規範化。

  1、第一範式:屬性列不能再分(數據達到原子性,不可再分)。

     eg:

      

   上圖違反了第一範式,學生數據可再進行拆分,否則無法對姓名、性別、年齡等單獨進行操作。

 

  2、第二範式:第二範式建立在第一範式的基礎上,非主屬性完全依賴於碼。 

       :消除部分依賴。

    說明:AB是R(A,B,C)的主鍵,那麼如果有A->C,這就是一個部分函數依賴

    eg:

      

  學生     年齡     課程     學分     成績     任課教師     課程課時  
  張三   18      java     2     80   胡      30
  李四     19     c++   3     90      胡     40  

 

   分析:

    (1)該R的關鍵字(主鍵)爲:學生 課程

      R的函數依賴集:學生-->年齡; 學生+課程-->學分、成績、年齡、任課教師等;即 年齡、學分、成績、任課教師等 完全依賴於 學生 和 課程。

      (2)R違反了第二範式,屬於第一範式

      存在非主屬性 年齡 依賴於 學生(學生-->年齡),即非主屬性(學生)對主屬性(學生+課程)部分依賴。

    (3)該關係模式R存在的問題

      刪除學生張三信息的同時會刪除課程信息,即學生張三畢業,需要刪除該學生信息,從此R中會同時刪除課程信息,導致數據丟失;

      數據冗餘,每添加一個學生,需要將課程信息重新添加一遍,導致數據庫保存數據大量冗餘。

    (4)規範該R到第二範式

      R1(學生、年齡)

      R2(學生課程、學分、成績)

      R3(課程、任課教師、課程課時)

      R1 學生-->年齡、學分、成績;

      R2 學生+課程-->學分、成績;

      R3 課程-->任課教師、課程課時;以上滿足非主屬性對主屬性的完全函數依賴。

 

 3、第三範式:設 R 爲任一給定關係,若 R 爲 2NF,且其每一個非主屬性都不傳遞函數依賴於候選關鍵字,則 R 爲第三範式(3NF)。即滿足第二範式的條件下不存在傳遞函數依賴。

   R(A,B,C),A是主鍵(聯合主鍵),如果同時有A->B和B->C,這就是一個傳遞依賴了

   eg:

    結合2(第二範式)的示例(規範到第二範式的結果),分析是否符合第三範式,若不符合,將其規範到第三範式。

      R1(學生、年齡)        -----------------滿足3NF

 

      R2(學生課程、學分、成績)  -----------------學生+課程-->成績,成績-->學分,但不存在成績-->學生+課程,故不符合3NF

 

      R3(課程、任課教師、課程課時)   -----------------滿足3NF

 

    R2再次拆分,

       R21(學生課程、成績)

       R22(成績、學分)

 

  4、BCNF範式:鮑依斯-科得範式(BCNF是3NF的改進形式)

  一個滿足BCNF的關係模式的條件:

  1. 所有非主屬性對每一個碼都是完全函數依賴。

  2. 所有的主屬性對每一個不包含它的碼,也是完全函數依賴。

  3. 沒有任何屬性完全函數依賴於非碼的任何一組屬性。

  即在第三範式的基礎上,消除了對主屬性對碼的部分和傳遞依賴。

  eg:

   假設倉庫管理關係表爲StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個數據庫表中存在如下決定關係:
     (倉庫ID, 存儲物品ID) →(管理員ID, 數量) 
     (管理員ID, 存儲物品ID) → (倉庫ID, 數量) 
   故,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵字段爲數量,它是符合第三範式的。但是,由於存在如下決定關係:
     (倉庫ID) → (管理員ID)

     (管理員ID) → (倉庫ID) 
   即,存在關鍵字段決定關鍵字段的情況,所以其不符合BCNF範式。

   把倉庫管理關係表分解爲二個關係表: 
       倉庫管理:StorehouseManage(倉庫ID, 管理員ID); 
       倉庫:Storehouse(倉庫ID, 存儲物品ID, 數量)。 
   這樣的數據庫表是符合BCNF範式的。

 

 5、第四範式(4NF)

  4NF就是限制關係模式的屬性之間不允許有非平凡且非函數依賴的多值依賴。因爲根據定義,對於每一個非平凡的多值依賴X→→Y,X都含有候選碼,於是就有X→Y,所以4NF所允許的非平凡的多值依賴實際上是函數依賴。

  和BC範式非常相像,對於所有的非平凡多值依賴,左邊必須是超碼。

 

 6、三大範式擴展

【例】設有關係模式 R(讀者號,姓名,單位號,單位名,圖書號,書名,借閱日期,還 書目期)存儲讀者借閱圖書等信息。

  如果規定:每個讀者只屬於一個單位;每個讀者可以借閱多本圖書,每本圖書也可以被多名 讀者借閱,每個讀者也可以對某本圖書多次借閱,但每個讀者每本圖書每天最多借一次。

  1. 根據上述條件,寫出模式 R 的關鍵字。

  2. R 最高屬於第幾範式,爲什麼?

  3. 舉例說明 R 在何種情況下會發生刪除異常。

  4. 將 R 規範到 3NF。

  解析:

  1、 答案: 讀者號 圖書號 借閱日期

  解析: 設 R 爲任一給定關係,U爲其所含的全部屬性集合,X爲U的子集,若有完全函數依賴 X→U,則 X 爲 R 的一個候選關鍵字。 作爲候選關鍵字的屬性集 X 唯一標識 R 中的元組,但該屬性集的任何真子集不能唯一標識 R 中的元組。顯然,一個關係 R 中可能存在多個候選關鍵字,通常選擇其中之一作爲主關鍵字, 即主鍵。 R 的函數依賴集={讀者號→(姓名,單位號),單位號→單位名,圖書號→書名,(讀者號, 圖書號,借閱日期)→還書目期},故關鍵字爲(讀者號,圖書號,借閱日期)。

  2、答案: R∈1NF,因爲存在非主屬性對碼的部分函數依賴。

  解析: 設 R 爲任一給定關係,如果 R 中每個列與行的交點處的取值都是不可再分的基本 元素,則 R 爲第一範式(1NF)。 定義 2.7 設 R 爲任一給定關係,若 R 爲 1NF,且其所有非主屬性都完全函數依賴於候選關鍵 字,則 R 爲第二範式(2NF)。 因爲存在非主屬性姓名,單位號只依賴於讀者號,和非主屬性書名只依賴於圖書號,即與關 鍵碼(讀者號,圖書號,借閱日期)存在部分函數依賴。故不屬於 2NF,最高屬於 1NF。

  3、答案: 刪除讀者借閱圖書信息時可能把讀者的基本信息也刪除了。

  解析: 1NF 是一個不含重複組的關係,1NF 存在着冗餘高、插入和刪 除操作異常等問題。比如: 若數據庫系統原理這本書被同一個單位的人借 100 次,那麼這個單位的單位名被重複記錄 100 次,造成大量數據冗餘。 若數據庫系統原理這本書還沒有被借出,那麼這本書的基本信息將無法存儲到這個關係中 去,就會出現插入異常的問題。 刪除讀者借閱圖書信息時可能把讀者的基本信息也刪除了。

  4、答案: R1(讀者號,姓名,單位號) R2(單位號,單位名) R3(圖書號,書名) R4(讀者號,圖書號,借閱日期,還書目期)

  解析: 設 R 爲任一給定關係,若 R 爲 1NF,且其所有非主屬性都完全函數依賴於候選關鍵 字,則 R 爲第二範式(2NF)。 先將 1NF 先規範爲 2NF,是消除非主屬性對候選關鍵字的部分函數依賴。本題中僅有非主屬 性“還書目期”完全函數依賴於(讀者號,圖書號,借閱日期),非主屬性“姓名”,“單 位號”,“單位名”只依賴於“讀者號”,和非主屬性“書名”只依賴於“圖書號”,故先 將 1NF 先規範爲 2NF: R1(讀者號,姓名,單位號,單位名)

  5、 R3(圖書號,書名) R4(讀者號,圖書號,借閱日期,還書目期) 

  設 R 爲任一給定關係,若 R 爲 2NF,且其每一個非主屬性都不傳遞函數依賴於候選關鍵字,則 R 爲第三範式(3NF)。 將 2NF 規範爲 3NF,是消除非主屬性對候選關鍵字的傳遞函數依賴。本題中 R1 中存在非主屬性對主屬性的傳遞函數依賴,即讀者號→單位號,單位號→單位名,但不存在單位號→讀 者號。故再將 2NF 關係 R1 進一步規範爲 3NF: R1(讀者號,姓名,單位號) R2(單位號,單位名)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章