数据库 范式
數據庫之六大范式詳解
**
關系數據庫中的關系滿足一定要求的,滿足不同程度要求的為不同的范式。滿足最低要求的叫第一范式,簡稱1NF;在第一范式的基礎上滿足進一步要求的稱為第二范式,簡稱2NF,其余范式以此類推。對于各種范式之間有如下關系:
如下圖所示:
1. 第一范式 1NF
定義:屬于第一范式關系的所有屬性都不可再分,即數據項不可分。
理解:第一范式強調數據表的原子性,是其他范式的基礎。如下圖所示數據庫就不符合第一范式:
上表將商品這一數據項又劃分為名稱和數量兩個數據項,故不符合第一范式關系。改正之后如下圖所示:
上表就符合第一范式關系。
但日常生活中僅用第一范式來規范表格是遠遠不夠的,依然會存在數據冗余過大、刪除異常、插入異常、修改異常的問題,此時就需要引入規范化概念,將其轉化為更標準化的表格,減少數據依賴。
規范化:一個低一級的關系模式通過模式分解可以轉化為若干個高一級范式的關系模式的集合,這個過程叫做規范化。
2. 第二范式 2NF
定義:若某關系R屬于第一范式,且每一個非主屬性完全函數依賴于任何一個候選碼,則關系R屬于第二范式。
此處我們需要理解非主屬性、候選碼和完全函數依賴的概念。
候選碼:若關系中的某一屬性組的值能唯一地標識一個元組,而其子集不能,則稱該屬性組為候選碼。若一個關系中有多個候選碼,則選定其中一個為主碼。
以下所有內容中,主碼或候選碼都簡稱為碼。
例如下圖所示的學生表中,學號和姓名都可以唯一標識一個元組,故該表的候選碼為學號和姓名,主碼我們可以隨便選定其中一個,則選學號為主碼。
| 學號 | 姓名 | 年齡 | 性別 |
|---|---|---|---|
| 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)表必須可以分解為較小的表,除非那些表在邏輯上擁有與原始表相同的主鍵。
第五范式是在第四范式的基礎上做的進一步規范化。第四范式處理的是相互獨立的多值情況,而第五范式則處理相互依賴的多值情況。
總結
- 上一篇: 怎么解决Win10升级预览版后出现的WS
- 下一篇: 数据库关系代数操作 并 差 积 选择 投