範式
滿足範式的數據庫有以下特徵:簡潔,明瞭,不會因爲發生插入(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的屬性都是原子項,不可分割。簡單地說:第一範式一定是一個二維表。
第一範式的缺點:容易造成,數據冗餘,插入,刪除,修改異常。
第二範式
在第一範式的基礎上,消除了非主屬性對主鍵的部分依賴。
主鍵:可以確定一列數據的唯一性的字段。
主屬性:碼裏面的屬性就是主屬性,其他的屬性叫做非主屬性。
每一行的數據只能與其中一列相關,即一行數據只做一件事。只要數據列中出現數據重複,就要把表拆分開來。
一個學生上一門課,一定在特定某個教室。所以有(學生,課程)教室;
一個學生上一門課,一定是特定某個老師教。所以有(學生,課程)老師;
一個學生上一門課,他老師的職稱可以確定。所以有(學生,課程)老師職稱;
一個學生上一門課,一定是特定某個教材。所以有(學生,課程)教材;
一個學生上一門課,一定在特定時間。所以有(學生,課程)上課時間。
因此(學生,課程)是一個聯合主鍵。
第二範式的問題
過於依賴主鍵造成的缺點:
- 數據冗餘:,每條記錄都含有相同信息。
- 刪除異常:刪除所有學生成績,就把課程信息全刪除了。
- 插入異常:學生未選課,無法記錄進數據庫。
- 更新異常:調整課程學分,所有行都調整。
解決方法:投影分解,將一個表分解成兩個或若干個表。
第三範式
數據不能存在傳遞關係,即沒個屬性都跟主鍵有直接關係而不是間接關係。像:a–>b–>c 屬性之間含有這樣的關係,是不符合第三範式的。
冗餘性:要求任何字段不能由其他字段派生出來,它要求字段沒有冗餘,即不存在傳遞依賴;
表:學號, 姓名, 年齡, 學院名稱, 學院電話
因爲存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。
第三範式的問題
- 數據冗餘:有重複值。
- 更新異常:有重複的冗餘信息,修改時需要同時修改多條記錄,否則會出現數據不一致的情況
解決方法:
- 繼續投影分解
- BC範式(BCNF):符合3NF,並且,主屬性不依賴於主屬性。
- 若關係模式屬於第一範式,且每個屬性都不傳遞依賴於鍵碼,則R屬於BC範式。