範式整理及理解

範式

滿足範式的數據庫有以下特徵:簡潔,明瞭,不會因爲發生插入(insert),刪除(delete),更新(update)等操作發生異常。
數據庫範式的級別:1nf,2nf,3nf,BCNF,4FN,5NF,一般商用滿足BCFN就可以了。

**注:**符合高一級的範式必定符合第一範式,範式是建立在函數依賴基礎上的。

函數依賴定義及類型

定義:
設X,Y是關係R的兩個屬性集合,當任何時刻R中的任意兩個元組中的X屬性值相同時,則它們的Y屬性值也相同,則稱X函數決定Y,或Y函數依賴於X。(可以理解爲數學上的定義域和值域的關係)

平凡函數依賴

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

非平凡函數依賴

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

完全函數依賴
設X,Y是關係R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函數依賴於X。

部分函數依賴

設X,Y是關係R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數依賴於X。

傳遞函數依賴
設X,Y,Z是關係R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數依賴於X。

範式類型及主要特徵

第一範式

如果關係模式R是第一範式的模式,那麼,R的每一個關係r的屬性都是原子項,不可分割。簡單地說:第一範式一定是一個二維表。
第一範式的缺點:容易造成,數據冗餘,插入,刪除,修改異常。

第二範式

在第一範式的基礎上,消除了非主屬性對主鍵的部分依賴。

主鍵:可以確定一列數據的唯一性的字段。
主屬性:碼裏面的屬性就是主屬性,其他的屬性叫做非主屬性。

每一行的數據只能與其中一列相關,即一行數據只做一件事。只要數據列中出現數據重複,就要把表拆分開來。


一個學生上一門課,一定在特定某個教室。所以有(學生,課程)\longrightarrow教室;
一個學生上一門課,一定是特定某個老師教。所以有(學生,課程)\longrightarrow老師;
一個學生上一門課,他老師的職稱可以確定。所以有(學生,課程)\longrightarrow老師職稱;
一個學生上一門課,一定是特定某個教材。所以有(學生,課程)\longrightarrow教材;
一個學生上一門課,一定在特定時間。所以有(學生,課程)\longrightarrow上課時間。

因此(學生,課程)是一個聯合主鍵。

第二範式的問題

過於依賴主鍵造成的缺點:

  • 數據冗餘:,每條記錄都含有相同信息。
  • 刪除異常:刪除所有學生成績,就把課程信息全刪除了。
  • 插入異常:學生未選課,無法記錄進數據庫。
  • 更新異常:調整課程學分,所有行都調整。

解決方法:投影分解,將一個表分解成兩個或若干個表。

第三範式

數據不能存在傳遞關係,即沒個屬性都跟主鍵有直接關係而不是間接關係。像:a–>b–>c 屬性之間含有這樣的關係,是不符合第三範式的。

冗餘性:要求任何字段不能由其他字段派生出來,它要求字段沒有冗餘,即不存在傳遞依賴;

表:學號, 姓名, 年齡, 學院名稱, 學院電話
因爲存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。

第三範式的問題

  • 數據冗餘:有重複值。
  • 更新異常:有重複的冗餘信息,修改時需要同時修改多條記錄,否則會出現數據不一致的情況

解決方法:

  • 繼續投影分解
  • BC範式(BCNF):符合3NF,並且,主屬性不依賴於主屬性。
  • 若關係模式屬於第一範式,且每個屬性都不傳遞依賴於鍵碼,則R屬於BC範式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章