關係數據庫中的關係知足必定要求的,知足不一樣程度要求的爲不一樣的範式。知足最低要求的叫第一範式,簡稱1NF;在第一範式的基礎上知足進一步要求的稱爲第二範式,簡稱2NF,其他範式以此類推。對於各類範式之間有以下關係:數據庫
以下圖所示:
1. 第一範式 1NFide
定義: 屬於第一範式關係的全部屬性都不可再分,即數據項不可分。函數
理解: 第一範式強調數據表的原子性,是其餘範式的基礎。以下圖所示數據庫就不符合第一範式:
上表將商品這一數據項又劃分爲名稱和數量兩個數據項,故不符合第一範式關係。改正以後以下圖所示:
上表就符合第一範式關係。設計
但平常生活中僅用第一範式來規範表格是遠遠不夠的,依然會存在數據冗餘過大、刪除異常、插入異常、修改異常的問題,此時就須要引入規範化概念,將其轉化爲更標準化的表格,減小數據依賴。blog
規範化: 一個低一級的關係模式經過模式分解能夠轉化爲若干個高一級範式的關係模式的集合,這個過程叫作規範化。it
2. 第二範式 2NFtable
定義: 若某關係R屬於第一範式,且每個非主屬性徹底函數依賴於任何一個候選碼,則關係R屬於第二範式。class
此處咱們須要理解非主屬性、候選碼和徹底函數依賴的概念。基礎
候選碼: 若關係中的某一屬性組的值能惟一地標識一個元組,而其子集不能,則稱該屬性組爲候選碼。若一個關係中有多個候選碼,則選定其中一個爲主碼。im
如下全部內容中,主碼或候選碼都簡稱爲碼。
例以下圖所示的學生表中,學號和姓名均可以惟一標識一個元組,故該表的候選碼爲學號和姓名,主碼咱們能夠隨便選定其中一個,則選學號爲主碼。
學號 | 姓名 | 年齡 | 性別 |
---|---|---|---|
101 | 劉晨 | 19 | 女 |
102 | 王琪 | 21 | 男 |
103 | 張宇 | 20 | 男 |
104 | 李琛 | 19 | 女 |
105 | 歐陽慧 | 20 | 女 |
主屬性: 全部候選碼的屬性稱爲主屬性。不包含在任何候選碼中的屬性稱爲非主屬性或非碼屬性。
在上面的學生表中,學號和姓名就是該關係的主屬性,年齡和性別就是非主屬性。
函數依賴: 設R(U)是屬性集U上的關係模式,X、Y是U的子集。若對於R(U)的任意一個可能的關係r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱Y函數依賴於X或X函數肯定Y。
徹底函數依賴: 設R(U)是屬性集U上的關係模式,X、Y是U的子集。若是Y函數依賴於X,且對於X的任何一個真子集X’,都有Y不函數依賴於X’,則稱Y對X徹底函數依賴。記做:若是Y函數依賴於X,但Y不徹底函數依賴於X,則稱Y對X部分函數依賴。
理解: 第二範式是指每一個表必須有一個(有且僅有一個)數據項做爲關鍵字或主鍵(primary key),其餘數據項與關鍵字或者主鍵一一對應,即其餘數據項徹底依賴於關鍵字或主鍵。由此可知單主屬性的關係均屬於第二範式。
判斷一個關係是否屬於第二範式:
以上面的學生表爲例,表中的碼爲學號(碼能夠爲學號或者姓名,此處假定碼爲學號),非主屬性爲性別、年齡(其他都爲主屬性),當學號肯定時,性別、年齡也都唯一的被肯定爲,故學生表的設計知足第二範式(學生表爲單主屬性的關係)。
下面舉一個不知足第二範式的關係。
有關係模式S-L-C(Sno, Sdept, Sloc, Cno, Grade),其中Sno, Sdept, Sloc, Cno, Grade依次表示學生的學號、所在的系、住處、課程號、班級,而且每一個系的學生住在同一個地方。可知S-L-C的碼爲(Sno, Cno),則存在如下函數依賴:
能夠看到,非主屬性Sloc、Sdept並不徹底函數依賴於碼,所以關係模式S-L-C(Sno, Sdept, Sloc, Cno, Grade)不符合第二範式。
3. 第三範式 3NF
定義: 非主屬性既不傳遞依賴於碼,也不部分依賴於碼。
首先咱們要理解傳遞函數依賴的概念。
理解: 第三範式要求在知足第二範式的基礎上,任何非主屬性不依賴於其餘非主屬性,即在第二範式的基礎上,消除了傳遞依賴。
在下圖S-L關係中,Sloc對Sno傳遞函數依賴,故該關係不屬於第三範式。
4. BC範式 BCFN
定義: 關係模式R<U,F>中,若每個決定因素都包含碼,則R<U,F>屬於BCFN。
理解: 根據定義咱們能夠獲得結論,一個知足BC範式的關係模式有:
例若有關係模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示課程號、課程名、先修課。可知關係C只有一個碼Cno,且沒有任何屬性對Cno部分函數依賴或傳遞函數依賴,因此關係C屬於第三範式,同時Cno是C中的惟一決定因素,因此C也屬於BC範式。
5. 第四範式 4NF
定義: 限制關係模式的屬性之間不容許有非平凡且非函數依賴的多值依賴。
理解: 顯然一個關係模式是4NF,則必爲BCNF。也就是說,當一個表中的非主屬性互相獨立時(3NF),這些非主屬性不該該有多值,如有多值就違反了4NF。
6. 第五範式 5NF
第五範式有如下要求:
(1)必須知足第四範式;
(2)表必須能夠分解爲較小的表,除非那些表在邏輯上擁有與原始表相同的主鍵。
第五範式是在第四範式的基礎上作的進一步規範化。第四範式處理的是相互獨立的多值狀況,而第五範式則處理相互依賴的多值狀況。