範式理論是爲了解決以上提到四種異常。算法
高級別範式的依賴於低級別的範式,1NF 是最低級別的範式。數據庫
屬性不可分。數據結構
相似於成績能夠分爲語文成績,數學成績,英語成績等等,那麼就說成績這個屬性是可分的,所以不能稱之爲第一範式1NF
。閉包
每一個非主屬性徹底函數依賴於鍵碼。數據庫設計
能夠經過分解來知足。函數
分解前工具
Sno | Sname | Sdept | Mname | Cname | Grade |
---|---|---|---|---|---|
1 | 學生 - 1 | 學院 - 1 | 院長 - 1 | 課程 - 1 | 90 |
2 | 學生 - 2 | 學院 - 2 | 院長 - 2 | 課程 - 2 | 80 |
2 | 學生 - 2 | 學院 - 2 | 院長 - 2 | 課程 - 1 | 100 |
3 | 學生 - 3 | 學院 - 2 | 院長 - 2 | 課程 - 2 | 95 |
以上學生課程關係中,{Sno, Cname} 爲鍵碼,有以下函數依賴:優化
Grade 徹底函數依賴於鍵碼,它沒有任何冗餘數據,每一個學生的每門課都有特定的成績。spa
Sname, Sdept 和 Mname 都部分依賴於鍵碼,當一個學生選修了多門課時,這些數據就會出現屢次,形成大量冗餘數據。設計
分解後
關係 - 1
Sno | Sname | Sdept | Mname |
---|---|---|---|
1 | 學生 - 1 | 學院 - 1 | 院長 - 1 |
2 | 學生 - 2 | 學院 - 2 | 院長 - 2 |
3 | 學生 - 3 | 學院 - 2 | 院長 - 2 |
有如下函數依賴:
關係 - 2
Sno | Cname | Grade |
---|---|---|
1 | 課程 - 1 | 90 |
2 | 課程 - 2 | 80 |
2 | 課程 - 1 | 100 |
3 | 課程 - 2 | 95 |
有如下函數依賴:
非主屬性不傳遞函數依賴於鍵碼。
上面的 關係 - 1 中存在如下傳遞函數依賴:
能夠進行如下分解:
關係 - 11
Sno | Sname | Sdept |
---|---|---|
1 | 學生 - 1 | 學院 - 1 |
2 | 學生 - 2 | 學院 - 2 |
3 | 學生 - 3 | 學院 - 2 |
關係 - 12
Sdept | Mname |
---|---|
學院 - 1 | 院長 - 1 |
學院 - 2 | 院長 - 2 |
規範化理論是數據庫邏輯設計的工具
使用範式設計數據庫的目的是爲了消除插入,刪除異常,修改複雜以及數據冗餘的問題。
如有\(R\in BCNF\)
關係R屬於BCNF是R屬於3NF的充分沒必要要條件。
對於知足一組函數依賴 F 的關係模式 R<U,F> 其任何一個關係 r,若函數依賴 X→Y 都成立,(即r 中任意兩元組 t,s,若 t[X]=s[X],則 t[Y]=s[Y]),則稱 F 邏輯蘊含 X→Y.
對於關係模式 \(R<U,F>\)有以下規律
由上面三條規律能夠拓展出更多的規律
在關係模式 \(R<U,F>\)中爲$ F \(所蘊涵的函數依賴的全體叫作\)F$ 的閉包,記爲 \(F^+\).
閉包中的每個函數依賴均可以從F根據Armstrong公理推導出來。但惋惜的是,其閉包是一個NP徹底問題。
屬性集 X 關於函數依賴集 F 的閉包\(X_F^+\):
求屬性集 X 關於 U 上的函數依賴集F的閉包$ X_F^+$
輸入: \(X,F\);
輸出:$ X_F^+ $
對於該算法, 令\(a_i=|X^i|,{a_i}\)造成一個步長大於1的嚴格遞增的序列,序列的上界是 \(| U|\),所以該算法最多 \(| U | - |X|\) 次循環就會終止。
分解以後能夠用天然鏈接恢復本來的模式。
例如上圖中,學院決定院長這個函數關係是存在的,知足了定理中的一個條件,因此該分解就是無損鏈接的分解。
充分條件:若是F上的每個函數依賴都在其分解後的某一個關係上成立,則這個分解是保持依賴的。
Entity-Relationship,有三個組成部分:實體、屬性、聯繫。
用來進行關係型數據庫系統的概念設計。
E-R有意思的一點在於其將實體之間的關係也實例化了,同時關係也能擁有屬性。
這裏的選修關係就存在成績屬性。但也能夠當作關係連接的實體所定義的屬性是成績。
包含一對一,一對多,多對多三種。
下圖的 Course 和 Student 是一對多的關係。
一個實體在聯繫出現幾回,就要用幾條線鏈接。
下圖表示一個課程的先修關係,先修關係出現兩個 Course 實體,第一個是先修課程,後一個是後修課程,所以須要用兩條線來表示這種關係。
雖然老師能夠開設多門課,而且能夠教授多名學生,可是對於特定的學生和課程,只有一個老師教授,這就構成了一個三元聯繫。
用一個三角形和兩條線來鏈接類和子類,與子類有關的屬性和聯繫都連到子類上,而與父類和子類都有關的連到父類上。
實體與屬性的劃分原則:現實世界的事物能做爲屬性對待的儘可能做爲屬性對待。
在合併E-R圖的時候會遇到三種衝突:
數據庫設計分爲六個階段
準確瞭解和分析用戶需求,包括數據處理,需求分析是整個設計過程的基礎,是最困難和最耗費時間的一步。
數據字典是進行詳細的數據收集和數據分析所得到的主要成果,它是關於數據庫中數據的描述,即元數據,而不是數據自己。數據字典是在需求分析階段創建,在數據庫設計的過程當中不斷的修改,充實,完善的。
數據字典多包括這麼幾個部分:
數據字典經過對數據項和數據結構的定義來描述數據流,數據存儲的邏輯內容。
概念結構設計是整個數據庫設計的關鍵,它經過對用戶需求進行綜合,概括和抽象,造成一個獨立於具體數據庫管理系統以外的概念模型。
包括[ER圖](#ER 圖)的設計。
將概念結構模型轉換爲某個數據庫管理系統 DBMS 支持的數據模型,並對其進行優化。
是爲邏輯數據模型選取一個最適合應用環境的物理結構,包括存儲結構和存儲方法。
在數據庫實施階段,設計人員運用數據庫管理系統提供的數據庫語言及其宿主語言,根據邏輯設計和物理結構設計的結果創建數據庫,編寫調試應用程序,組織數據入庫,並進行試運行。
通過試運行以後便可投入正常使用。