数据库系统(三)--关系型数据库规范化之范式
一 、關系模式可能會存在的問題:
1. 數據冗余
2. 更新異常
3. 插入異常
4. 刪除異常
二、相關概念
1、實體:現實世界中客觀存在并可以被區別的事物。這里所說的“事物”不僅僅是看得見摸得著的“東西”,它也可以是虛擬的,比如說“老師與學校的關系”。
2、屬性:實體所具有的某一特性。
3、分量:元組的某個屬性值。在一個關系數據庫中,它是一個操作原子,即關系數據庫在做任何操作的時候,屬性是“不可分的”。否則就不是關系數據庫了。
4、碼/鍵:表中可以唯一確定一個元組的某個屬性(或者屬性組)。
5、候選碼或候選鍵:如果在關系的一個碼或鍵中,不能從中移去任何一個屬性,否則它就不是這個關系的碼或鍵。則稱這樣的碼或鍵為該關系的候選碼或候選鍵。一個關系的候選碼或候選鍵是這個關系的最小超碼或超鍵。
6、全碼/全鍵:如果一個碼包含了所有的屬性,這個碼就是全碼。
7、主碼或主鍵:在一個關系的若干個候選碼或候選鍵中指定一個用來唯一標識關系的元組,則 稱這個被指定的候選碼或候選鍵為該關系的主碼或主鍵。
8、主屬性:一個屬性只要在任何一個候選碼中出現過,這個屬性就是主屬性。
9、非主屬性:與主屬性相反,沒有在任何候選碼中出現過,這個屬性就是非主屬性。
10、外碼/外鍵:一個屬性(或屬性組),它不是碼,但是它別的表的碼,它就是外碼。
11、域:域表示屬性的取值范圍。
12、參照關系: 參照關系也稱為從關系,被參照關系也稱為主關系,它們是指以外碼相關聯的兩個關系。外碼所在的關系稱為參照關系。
13、被參照關系:以外碼作為主碼的關系稱為被參照關系;被參照關系與參照關系是通過外碼相聯系的,這種聯系通常是一對多的 聯系。
14、關系模式:同數據模型一樣,數據庫也有型和值之分。在關系數據庫中,關系模式是型, 關系是值,即關系模式是對關系的描述。關系模式是靜態的、穩定的,而關系是動態的、隨時間不斷變化的。這是因為關系操作在不斷地更新著數據庫中的數據。 人們常常會把關系模式和關系都籠統地稱為關系。
15、函數依賴:指關系中屬性間的對應關系。 設 R 為任一給定關系,如果對于 R 中屬性 X 的每一個值,R 中的屬性 Y 只有唯一值與之對應,則稱 X 函數決定 Y 或稱 Y 函數依賴于 X,記作 X→ Y。其中 X 稱為決定因素。或 設X,Y是關系R的兩個屬性集合,當任何時刻R中的任意兩個元組中的X屬性值相同時,則它們的Y屬性值也相同,則稱X函數決定Y,或Y函數依賴于X。
16、 完全函數依賴:設 R 為任一給定關系,X、Y 為其屬性集,若 X→Y,且對 X 中的任何真子集 X ,都有 X ,Y,則稱 Y 完全函數依賴于 X。
17、部分函數依賴: 設 R 為任一給定關系,X、Y 為其屬性集,若 X→Y,且 X 中存在一個真子集 X ,滿足 X →Y,則稱 Y 部分函數依賴于 X。
18、傳遞函數依賴:設 R 為任一給定關系,X、Y、Z 為其不同屬性子集,若 X→Y,Y X,Y→Z,則有 X→Z,稱為 Z 傳遞函數依賴于 X。 知識點五 定義 2.5 關鍵字的定義 定義 2.5 設 R 為任一給定關系,U 為其所含的全部屬性集合,X 為 U 的子集, 若有完全函數依賴 X→U,則 X 為 R 的一個候選關鍵字。
19、數據依賴:在計算機科學中,數據依賴是指一種狀態,當程序結構導致數據引用之前處理過的數據時的狀態。其中最重要的是函數依賴和多值依賴。
20、平凡函數依賴:當關系中屬性集合Y是屬性集合X的子集時(Y?X),存在函數依賴X→Y,即一組屬性函數決定它的所有子集,這種函數依賴稱為平凡函數依賴。
21、非平凡函數依賴 、:當關系中屬性集合Y不是屬性集合X的子集時,存在函數依賴X→Y,則稱這種函數依賴為非平凡函數依賴。
22、多值依賴:設R(U)是屬性集U上的一個關系模式。X,Y,Z是U的子集,并且Z=U-X-Y。關系模式R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關系r,給定的一對(x,z)值有一組Y的值,這組值僅僅決定于x值而與z值無關。 平凡的多值依賴與非平凡的多值依賴: 若X→→Y,而Z為空集,則稱X→→Y為平凡的多值依賴;若Z不為空,則稱其為非平凡的多值依賴。
三、范式
0、基礎概念
范式:即在關系型數據庫中定義規范(優化數據數據存儲方式、數據的存儲性能等)就可以稱為范式。
規范化:一個低一級范式的關系模式通過模式分解可以轉換為若干個高一級范式的關系 模式的集合,這種過程就叫規范化。
1、第一范式:屬性列不能再分(數據達到原子性,不可再分)。
eg:
上圖違反了第一范式,學生數據可再進行拆分,否則無法對姓名、性別、年齡等單獨進行操作。
2、第二范式:第二范式建立在第一范式的基礎上,非主屬性完全依賴于碼。
即:消除部分依賴。
說明:AB是R(A,B,C)的主鍵,那么如果有A->C,這就是一個部分函數依賴
eg:
| 學生 | 年齡 | 課程 | 學分 | 成績 | 任課教師 | 課程課時 |
| 張三 | 18 | java | 2 | 80 | 胡 | 30 |
| 李四 | 19 | c++ | 3 | 90 | 胡 | 40 |
分析:
(1)該R的關鍵字(主鍵)為:學生 課程
R的函數依賴集:學生-->年齡; 學生+課程-->學分、成績、年齡、任課教師等;即 年齡、學分、成績、任課教師等 完全依賴于 學生 和 課程。
(2)R違反了第二范式,屬于第一范式
存在非主屬性 年齡 依賴于 學生(學生-->年齡),即非主屬性(學生)對主屬性(學生+課程)部分依賴。
(3)該關系模式R存在的問題
刪除學生張三信息的同時會刪除課程信息,即學生張三畢業,需要刪除該學生信息,從此R中會同時刪除課程信息,導致數據丟失;
數據冗余,每添加一個學生,需要將課程信息重新添加一遍,導致數據庫保存數據大量冗余。
(4)規范該R到第二范式
R1(學生、年齡)
R2(學生、課程、學分、成績)
R3(課程、任課教師、課程課時)
R1 學生-->年齡、學分、成績;
R2 學生+課程-->學分、成績;
R3 課程-->任課教師、課程課時;以上滿足非主屬性對主屬性的完全函數依賴。
3、第三范式:設 R 為任一給定關系,若 R 為 2NF,且其每一個非主屬性都不傳遞函數依賴于候選關鍵字,則 R 為第三范式(3NF)。即滿足第二范式的條件下不存在傳遞函數依賴。
R(A,B,C),A是主鍵(聯合主鍵),如果同時有A->B和B->C,這就是一個傳遞依賴了
eg:
結合2(第二范式)的示例(規范到第二范式的結果),分析是否符合第三范式,若不符合,將其規范到第三范式。
R1(學生、年齡) -----------------滿足3NF
R2(學生、課程、學分、成績) -----------------學生+課程-->成績,成績-->學分,但不存在成績-->學生+課程,故不符合3NF
R3(課程、任課教師、課程課時) -----------------滿足3NF
R2再次拆分,
R21(學生、課程、成績)
R22(成績、學分)
4、BCNF范式:鮑依斯-科得范式(BCNF是3NF的改進形式)
一個滿足BCNF的關系模式的條件:
1. 所有非主屬性對每一個碼都是完全函數依賴。
2. 所有的主屬性對每一個不包含它的碼,也是完全函數依賴。
3. 沒有任何屬性完全函數依賴于非碼的任何一組屬性。
即在第三范式的基礎上,消除了對主屬性對碼的部分和傳遞依賴。
eg:
假設倉庫管理關系表為StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個數據庫表中存在如下決定關系:
(倉庫ID, 存儲物品ID) →(管理員ID, 數量)
(管理員ID, 存儲物品ID) → (倉庫ID, 數量)
故,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵字段為數量,它是符合第三范式的。但是,由于存在如下決定關系:
(倉庫ID) → (管理員ID)
(管理員ID) → (倉庫ID)
即,存在關鍵字段決定關鍵字段的情況,所以其不符合BCNF范式。
把倉庫管理關系表分解為二個關系表:
倉庫管理:StorehouseManage(倉庫ID, 管理員ID);
倉庫:Storehouse(倉庫ID, 存儲物品ID, 數量)。
這樣的數據庫表是符合BCNF范式的。
5、第四范式(4NF)
4NF就是限制關系模式的屬性之間不允許有非平凡且非函數依賴的多值依賴。因為根據定義,對于每一個非平凡的多值依賴X→→Y,X都含有候選碼,于是就有X→Y,所以4NF所允許的非平凡的多值依賴實際上是函數依賴。
和BC范式非常相像,對于所有的非平凡多值依賴,左邊必須是超碼。
6、三大范式擴展
【例】設有關系模式 R(讀者號,姓名,單位號,單位名,圖書號,書名,借閱日期,還 書目期)存儲讀者借閱圖書等信息。
如果規定:每個讀者只屬于一個單位;每個讀者可以借閱多本圖書,每本圖書也可以被多名 讀者借閱,每個讀者也可以對某本圖書多次借閱,但每個讀者每本圖書每天最多借一次。
1. 根據上述條件,寫出模式 R 的關鍵字。
2. R 最高屬于第幾范式,為什么?
3. 舉例說明 R 在何種情況下會發生刪除異常。
4. 將 R 規范到 3NF。
解析:
1、 答案: 讀者號 圖書號 借閱日期
解析: 設 R 為任一給定關系,U為其所含的全部屬性集合,X為U的子集,若有完全函數依賴 X→U,則 X 為 R 的一個候選關鍵字。 作為候選關鍵字的屬性集 X 唯一標識 R 中的元組,但該屬性集的任何真子集不能唯一標識 R 中的元組。顯然,一個關系 R 中可能存在多個候選關鍵字,通常選擇其中之一作為主關鍵字, 即主鍵。 R 的函數依賴集={讀者號→(姓名,單位號),單位號→單位名,圖書號→書名,(讀者號, 圖書號,借閱日期)→還書目期},故關鍵字為(讀者號,圖書號,借閱日期)。
2、答案: R∈1NF,因為存在非主屬性對碼的部分函數依賴。
解析: 設 R 為任一給定關系,如果 R 中每個列與行的交點處的取值都是不可再分的基本 元素,則 R 為第一范式(1NF)。 定義 2.7 設 R 為任一給定關系,若 R 為 1NF,且其所有非主屬性都完全函數依賴于候選關鍵 字,則 R 為第二范式(2NF)。 因為存在非主屬性姓名,單位號只依賴于讀者號,和非主屬性書名只依賴于圖書號,即與關 鍵碼(讀者號,圖書號,借閱日期)存在部分函數依賴。故不屬于 2NF,最高屬于 1NF。
3、答案: 刪除讀者借閱圖書信息時可能把讀者的基本信息也刪除了。
解析: 1NF 是一個不含重復組的關系,1NF 存在著冗余高、插入和刪 除操作異常等問題。比如: 若數據庫系統原理這本書被同一個單位的人借 100 次,那么這個單位的單位名被重復記錄 100 次,造成大量數據冗余。 若數據庫系統原理這本書還沒有被借出,那么這本書的基本信息將無法存儲到這個關系中 去,就會出現插入異常的問題。 刪除讀者借閱圖書信息時可能把讀者的基本信息也刪除了。
4、答案: R1(讀者號,姓名,單位號) R2(單位號,單位名) R3(圖書號,書名) R4(讀者號,圖書號,借閱日期,還書目期)
解析: 設 R 為任一給定關系,若 R 為 1NF,且其所有非主屬性都完全函數依賴于候選關鍵 字,則 R 為第二范式(2NF)。 先將 1NF 先規范為 2NF,是消除非主屬性對候選關鍵字的部分函數依賴。本題中僅有非主屬 性“還書目期”完全函數依賴于(讀者號,圖書號,借閱日期),非主屬性“姓名”,“單 位號”,“單位名”只依賴于“讀者號”,和非主屬性“書名”只依賴于“圖書號”,故先 將 1NF 先規范為 2NF: R1(讀者號,姓名,單位號,單位名)
5、 R3(圖書號,書名) R4(讀者號,圖書號,借閱日期,還書目期)
設 R 為任一給定關系,若 R 為 2NF,且其每一個非主屬性都不傳遞函數依賴于候選關鍵字,則 R 為第三范式(3NF)。 將 2NF 規范為 3NF,是消除非主屬性對候選關鍵字的傳遞函數依賴。本題中 R1 中存在非主屬性對主屬性的傳遞函數依賴,即讀者號→單位號,單位號→單位名,但不存在單位號→讀 者號。故再將 2NF 關系 R1 進一步規范為 3NF: R1(讀者號,姓名,單位號) R2(單位號,單位名)
總結
以上是生活随笔為你收集整理的数据库系统(三)--关系型数据库规范化之范式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现内网穿透netapp
- 下一篇: 苹果手表站立12小时如何改