一 、關係模式可能會存在的問題: java
1. 數據冗餘 c++
2. 更新異常 數據庫
3. 插入異常 函數
4. 刪除異常性能
2、相關概念優化
一、實體:現實世界中客觀存在並能夠被區別的事物。這裏所說的「事物」不只僅是看得見摸得着的「東西」,它也能夠是虛擬的,好比說「老師與學校的關係」。spa
二、屬性:實體所具備的某一特性。blog
三、份量:元組的某個屬性值。在一個關係數據庫中,它是一個操做原子,即關係數據庫在作任何操做的時候,屬性是「不可分的」。不然就不是關係數據庫了。io
四、碼/鍵:表中能夠惟一肯定一個元組的某個屬性(或者屬性組)。table
五、候選碼或候選鍵:若是在關係的一個碼或鍵中,不能從中移去任何一個屬性,不然它就不是這個關係的碼或鍵。則稱這樣的碼或鍵爲該關係的候選碼或候選鍵。一個關係的候選碼或候選鍵是這個關係的最小超碼或超鍵。
六、全碼/全鍵:若是一個碼包含了全部的屬性,這個碼就是全碼。
七、主碼或主鍵:在一個關係的若干個候選碼或候選鍵中指定一個用來惟一標識關係的元組,則 稱這個被指定的候選碼或候選鍵爲該關係的主碼或主鍵。
八、主屬性:一個屬性只要在任何一個候選碼中出現過,這個屬性就是主屬性。
九、非主屬性:與主屬性相反,沒有在任何候選碼中出現過,這個屬性就是非主屬性。
十、外碼/外鍵:一個屬性(或屬性組),它不是碼,可是它別的表的碼,它就是外碼。
十一、域:域表示屬性的取值範圍。
十二、參照關係: 參照關係也稱爲從關係,被參照關係也稱爲主關係,它們是指之外碼相關聯的兩個關係。外碼所在的關係稱爲參照關係。
1三、被參照關係:之外碼做爲主碼的關係稱爲被參照關係;被參照關係與參照關係是經過外碼相聯繫的,這種聯繫一般是一對多的 聯繫。
1四、關係模式:同數據模型同樣,數據庫也有型和值之分。在關係數據庫中,關係模式是型, 關係是值,即關係模式是對關係的描述。關係模式是靜態的、穩定的,而關係是動態的、隨時間不斷變化的。這是由於關係操做在不斷地更新着數據庫中的數據。 人們經常會把關係模式和關係都籠統地稱爲關係。
1五、函數依賴:指關係中屬性間的對應關係。 設 R 爲任一給定關係,若是對於 R 中屬性 X 的每個值,R 中的屬性 Y 只有惟一值與之對應,則稱 X 函數決定 Y 或稱 Y 函數依賴於 X,記做 X→ Y。其中 X 稱爲決定因素。 或 設X,Y是關係R的兩個屬性集合,當任什麼時候刻R中的任意兩個元組中的X屬性值相同時,則它們的Y屬性值也相同,則稱X函數決定Y,或Y函數依賴於X。
1六、 徹底函數依賴:設 R 爲任一給定關係,X、Y 爲其屬性集,若 X→Y,且對 X 中的任何真子集 X ,都有 X ,Y,則稱 Y 徹底函數依賴於 X。
1七、部分函數依賴: 設 R 爲任一給定關係,X、Y 爲其屬性集,若 X→Y,且 X 中存在一個真子集 X ,知足 X →Y,則稱 Y 部分函數依賴於 X。
1八、傳遞函數依賴:設 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 的一個候選關鍵字。
1九、數據依賴:在計算機科學中,數據依賴是指一種狀態,當程序結構致使數據引用以前處理過的數據時的狀態。其中最重要的是函數依賴和多值依賴。
20、平凡函數依賴:當關系中屬性集合Y是屬性集合X的子集時(Y?X),存在函數依賴X→Y,即一組屬性函數決定它的全部子集,這種函數依賴稱爲平凡函數依賴。
2一、非平凡函數依賴 、:當關系中屬性集合Y不是屬性集合X的子集時,存在函數依賴X→Y,則稱這種函數依賴爲非平凡函數依賴。
2二、多值依賴:設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不爲空,則稱其爲非平凡的多值依賴。
3、範式
0、基礎概念
範式:即在關係型數據庫中定義規範(優化數據數據存儲方式、數據的存儲性能等)就能夠稱爲範式。
規範化:一個低一級範式的關係模式經過模式分解能夠轉換爲若干個高一級範式的關係 模式的集合,這種過程就叫規範化。
一、第一範式:屬性列不能再分(數據達到原子性,不可再分)。
eg:
上圖違反了第一範式,學生數據可再進行拆分,不然沒法對姓名、性別、年齡等單獨進行操做。
二、第二範式:第二範式創建在第一範式的基礎上,非主屬性徹底依賴於碼。
即:消除部分依賴。
說明: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 課程-->任課教師、課程課時;以上知足非主屬性對主屬性的徹底函數依賴。
三、第三範式:設 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(成績、學分)
四、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範式的。
五、第四範式(4NF)
4NF就是限制關係模式的屬性之間不容許有非平凡且非函數依賴的多值依賴。由於根據定義,對於每個非平凡的多值依賴X→→Y,X都含有候選碼,因而就有X→Y,因此4NF所容許的非平凡的多值依賴其實是函數依賴。
和BC範式很是相像,對於全部的非平凡多值依賴,左邊必須是超碼。
六、三大範式擴展
【例】設有關係模式 R(讀者號,姓名,單位號,單位名,圖書號,書名,借閱日期,還 書目期)存儲讀者借閱圖書等信息。
若是規定:每一個讀者只屬於一個單位;每一個讀者能夠借閱多本圖書,每本圖書也能夠被多名 讀者借閱,每一個讀者也能夠對某本圖書屢次借閱,但每一個讀者每本圖書天天最多借一次。
1. 根據上述條件,寫出模式 R 的關鍵字。
2. R 最高屬於第幾範式,爲何?
3. 舉例說明 R 在何種狀況下會發生刪除異常。
4. 將 R 規範到 3NF。
解析:
一、 答案: 讀者號 圖書號 借閱日期
解析: 設 R 爲任一給定關係,U爲其所含的所有屬性集合,X爲U的子集,如有徹底函數依賴 X→U,則 X 爲 R 的一個候選關鍵字。 做爲候選關鍵字的屬性集 X 惟一標識 R 中的元組,但該屬性集的任何真子集不能惟一標識 R 中的元組。顯然,一個關係 R 中可能存在多個候選關鍵字,一般選擇其中之一做爲主關鍵字, 即主鍵。 R 的函數依賴集={讀者號→(姓名,單位號),單位號→單位名,圖書號→書名,(讀者號, 圖書號,借閱日期)→還書目期},故關鍵字爲(讀者號,圖書號,借閱日期)。
二、答案: R∈1NF,由於存在非主屬性對碼的部分函數依賴。
解析: 設 R 爲任一給定關係,若是 R 中每一個列與行的交點處的取值都是不可再分的基本 元素,則 R 爲第一範式(1NF)。 定義 2.7 設 R 爲任一給定關係,若 R 爲 1NF,且其全部非主屬性都徹底函數依賴於候選關鍵 字,則 R 爲第二範式(2NF)。 由於存在非主屬性姓名,單位號只依賴於讀者號,和非主屬性書名只依賴於圖書號,即與關 鍵碼(讀者號,圖書號,借閱日期)存在部分函數依賴。故不屬於 2NF,最高屬於 1NF。
三、答案: 刪除讀者借閱圖書信息時可能把讀者的基本信息也刪除了。
解析: 1NF 是一個不含重複組的關係,1NF 存在着冗餘高、插入和刪 除操做異常等問題。好比: 若數據庫系統原理這本書被同一個單位的人借 100 次,那麼這個單位的單位名被重複記錄 100 次,形成大量數據冗餘。 若數據庫系統原理這本書尚未被借出,那麼這本書的基本信息將沒法存儲到這個關係中 去,就會出現插入異常的問題。 刪除讀者借閱圖書信息時可能把讀者的基本信息也刪除了。
四、答案: R1(讀者號,姓名,單位號) R2(單位號,單位名) R3(圖書號,書名) R4(讀者號,圖書號,借閱日期,還書目期)
解析: 設 R 爲任一給定關係,若 R 爲 1NF,且其全部非主屬性都徹底函數依賴於候選關鍵 字,則 R 爲第二範式(2NF)。 先將 1NF 先規範爲 2NF,是消除非主屬性對候選關鍵字的部分函數依賴。本題中僅有非主屬 性「還書目期」徹底函數依賴於(讀者號,圖書號,借閱日期),非主屬性「姓名」,「單 位號」,「單位名」只依賴於「讀者號」,和非主屬性「書名」只依賴於「圖書號」,故先 將 1NF 先規範爲 2NF: R1(讀者號,姓名,單位號,單位名)
五、 R3(圖書號,書名) R4(讀者號,圖書號,借閱日期,還書目期)
設 R 爲任一給定關係,若 R 爲 2NF,且其每個非主屬性都不傳遞函數依賴於候選關鍵字,則 R 爲第三範式(3NF)。 將 2NF 規範爲 3NF,是消除非主屬性對候選關鍵字的傳遞函數依賴。本題中 R1 中存在非主屬性對主屬性的傳遞函數依賴,即讀者號→單位號,單位號→單位名,但不存在單位號→讀 者號。故再將 2NF 關係 R1 進一步規範爲 3NF: R1(讀者號,姓名,單位號) R2(單位號,單位名)