天天看點

函數依賴及資料庫範式 1、函數依賴2、資料庫範式3、第一範式4、第二範式5、第三範式6、鮑依斯-科得範式

1、函數依賴

  (1)簡介

    定義:設U{A1,A2,…,An}是屬性集合,R(U)是U上的一個關系,x、y是U的子集。若對于R(U)下的任何一個可能的關系,   均有x的一個值對應于y的唯一具體值,稱y函數依賴于x,記作x→y。   其中x稱為決定因素。進而若再有y→x,則稱x與y互相依賴,記作x←→y。

    函數依賴是從數學角度來定義的,在關系中用來刻畫關系各屬性之間互相制約而又互相依賴的情況。

    比如描述一個學生可有學号、姓名、系等多個屬性,由于一個學号對應一個且僅一個學生,一個學生就讀于一個确定的系,因而當“學号”屬性的值确定之後,“姓名”及“所在系”的值也就唯一地确定了,此時,就可以稱“姓名”和“所在系”函數依賴于“學号”,或者說“學号”函數決定“姓名”和“所在系”,記作:學号→姓名、學号→所在系。

    

  (2)函數依賴的種類

    函數依賴還可細分為多種依賴:  

    ● 部分函數依賴   

      設關系模式 R(U)是屬性集U上的關系,x、y是U的子集,x’是x的真子集,若x→y且x’→y,則稱y部分依賴x,記作X→PY。顯然,當且僅當x為複合屬性組時,才有可能出現部分函數依賴。   

    ● 完全函數依賴   

      設R(U)是屬性集U上的關系,x、y是U的子集,x’是x的真子集。若對于R(U)的任何一個可能的關系,有x→y但不存在x’→y,則稱y完全函數依賴于x,記作X→FY。 所謂完全依賴是說明在依賴關系的決定項(即依賴關系的左項)中沒有多餘屬性,有多餘屬性就是部分依賴。   

      例如設關系模式 R(學号,姓名,班号,課程号,成績),(學号,班号,課程号)→成績 是R的一個部分依賴關系。因為有(學号,課程号)→成績 成立,并且不存在學号→成績或課程号→成績,是以(學号,課程号)→   成績是完全依賴關系。   

    ● 傳遞函數依賴   

      設R(U)是屬性集U上的關系,x、y、z是U的子集,在R(U)中,若x→y,但y→x,若y→z,則x→z,稱z傳遞函數依賴于x,記作X→TZ。   

例如課程名→職工号,并且有職工号→教師名稱,在這種情況下,教師名稱傳遞函數依賴于課程名。  

2、資料庫範式

  資料庫的範式設計是為了優化關系資料庫的關系模式,便于減少資料備援以及沖突,而範式就是建立在函數依賴的基礎之上。

  目前關系資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。滿足最低要求的範式是第一範式(1NF)。

  在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫隻需滿足第三範式(3NF)就行了。

3、第一範式

  定義:資料庫表中的字段都是單一屬性的,具有原子性,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字元型、邏輯型、日期型等。換句話說,第一範式要求資料庫中的表都是二維表。

  例如:

  

函數依賴及資料庫範式 1、函數依賴2、資料庫範式3、第一範式4、第二範式5、第三範式6、鮑依斯-科得範式

  圖中位于下面的表就不能符合第一範式。

4、第二範式

  定義:第二範式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實作區分通常需要為表加上一個列,以存儲各個執行個體的唯一辨別。

  簡而言之,第二範式就是在第一範式的基礎上消除非主屬性對主碼的部分函數依賴。

5、第三範式

  定義:第三範式就是屬性不依賴于其它非主屬性,也就是在滿足2NF的基礎上,任何非主屬性不得傳遞依賴于主屬性。

  例如,存在一個部門資訊表,其中每個部門有部門編号(dept_id)、部門名稱、部門簡介等資訊。那麼在的員工資訊表中列出部門編号後就不能再将部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三範式(3NF)也應該建構它,否則就會有大量的資料備援。

  換句話說,第三範式是在2NF基礎上消除了傳遞依賴。

6、鮑依斯-科得範式

  定義:在第三範式的基礎上,任何主屬性不能對主鍵子集依賴,即主屬性不依賴于主屬性。

  3NF去除了非主屬性對主鍵的部分函數依賴和傳遞函數依賴。一般滿足3NF的關系模式已能消除備援和各種異常現象,獲得較滿意的效果,但無論2NF還是3NF都沒有涉及主屬性間的函數依賴,是以有時仍會引起一些問題。由此我們引入BC範式(BCNF,Boyeet和Codd提出)。

  通常情況下,巴斯-科德範式被認為沒有新的設計規範加入,隻是對第二範式與第三範式中設計規範要求更強,因而被認為是修正第三範式,也就是說,它事實上是對第三範式的修正,使資料庫備援度更小。這也是BCNF不被稱為第四範式的原因。

  對于BCNF,在主碼的任何一個真子集都不能決定于主屬性。關系中U主碼,若U中的任何一個真子集X都不能決定于主屬性Y,則該設計規範屬性BCNF。例如:在關系R中,U為主碼,A屬性是主碼中的一個屬性,若存在A->Y,Y為主屬性,則該關系不屬于BCNF。

  還可以這麼說:若一個關系達到了第三範式,并且它隻有一個候選碼,或者它的每個候選碼都是單屬性,則該關系自然達到BC範式。

  當一個關系模式R∈BCNF,則在函數依賴範疇裡,已實作了分離,消除了插入、删除的異常。一般關系型資料庫設計中,達到BCNF就可以了!

  小結:資料庫範式可避免資料備援和操作異常。但是不符合範式的設計卻不一定是錯誤的,在資料庫表中存在1:1或1:N關系這種較特殊的情況下,合并導緻的不符合範式卻是合理的。

函數依賴及資料庫範式 1、函數依賴2、資料庫範式3、第一範式4、第二範式5、第三範式6、鮑依斯-科得範式

繼續閱讀