數據庫概論 (五)範式、數據庫設計

範式

範式理論是爲了解決以上提到四種異常。算法

高級別範式的依賴於低級別的範式,1NF 是最低級別的範式。數據庫

1. 第一範式 (1NF)

屬性不可分。數據結構

相似於成績能夠分爲語文成績,數學成績,英語成績等等,那麼就說成績這個屬性是可分的,所以不能稱之爲第一範式1NF閉包

2. 第二範式 (2NF)

每一個非主屬性徹底函數依賴於鍵碼。數據庫設計

能夠經過分解來知足。函數

分解前工具

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} 爲鍵碼,有以下函數依賴:優化

  • Sno -> Sname, Sdept
  • Sdept -> Mname
  • Sno, Cname-> Grade

Grade 徹底函數依賴於鍵碼,它沒有任何冗餘數據,每一個學生的每門課都有特定的成績。spa

Sname, Sdept 和 Mname 都部分依賴於鍵碼,當一個學生選修了多門課時,這些數據就會出現屢次,形成大量冗餘數據。設計

分解後

關係 - 1

Sno Sname Sdept Mname
1 學生 - 1 學院 - 1 院長 - 1
2 學生 - 2 學院 - 2 院長 - 2
3 學生 - 3 學院 - 2 院長 - 2

有如下函數依賴:

  • Sno -> Sname, Sdept
  • Sdept -> Mname

關係 - 2

Sno Cname Grade
1 課程 - 1 90
2 課程 - 2 80
2 課程 - 1 100
3 課程 - 2 95

有如下函數依賴:

  • Sno, Cname -> Grade

3. 第三範式 (3NF)

非主屬性不傳遞函數依賴於鍵碼。

上面的 關係 - 1 中存在如下傳遞函數依賴:

  • Sno -> Sdept -> Mname

能夠進行如下分解:

關係 - 11

Sno Sname Sdept
1 學生 - 1 學院 - 1
2 學生 - 2 學院 - 2
3 學生 - 3 學院 - 2

關係 - 12

Sdept Mname
學院 - 1 院長 - 1
學院 - 2 院長 - 2

規範化理論是數據庫邏輯設計的工具

image-20210102163504729

使用範式設計數據庫的目的是爲了消除插入,刪除異常,修改複雜以及數據冗餘的問題。

4. BC範式 (BCNF)

如有\(R\in BCNF\)

  • 全部非主屬性對每個碼都是徹底函數依賴
  • 全部的主屬性對每個不包含它的碼,也是徹底函數依賴
  • 沒有任何屬性徹底函數依賴於非碼的任何一組屬性 -> 除了碼以外沒有其餘的決定因素

關係R屬於BCNF是R屬於3NF的充分沒必要要條件。

image-20210102163922487

邏輯蘊含

對於知足一組函數依賴 F 的關係模式 R<U,F> 其任何一個關係 r,若函數依賴 X→Y 都成立,(即r 中任意兩元組 t,s,若 t[X]=s[X],則 t[Y]=s[Y]),則稱 F 邏輯蘊含 X→Y.

關係模式的推理規則

對於關係模式 \(R<U,F>\)有以下規律

  • 自反律:若\(Y⊆X⊆U\),則 \(X→Y\)\(F\)所蘊含;
  • 增光律:若\(X→Y\) 爲$ F\(所蘊含,且\) Z⊆U\(,則\) X∪Z→Y∪Z$ 爲 \(F\) 所蘊含.
  • 傳遞律:若\(X→Y\) 及$ Y→Z$ 爲 \(F\) 所蘊含,則\(X→Z\)\(F\) 所蘊含.

由上面三條規律能夠拓展出更多的規律

  • 合併規則:由 \(X→Y\)\(X→Z\),有\(X →Y U Z\)
  • 僞傳遞規則:由\(X →Y\)\(W ∪ Y→Z\),有\(X ∪ W →Z\)
  • 分解規則:由\(X→Y\) 及$ Z \subseteq Y\(,有\)X →Z$

函數閉包

在關係模式 \(R<U,F>\)中爲$ F \(所蘊涵的函數依賴的全體叫作\)F$ 的閉包,記爲 \(F^+\).

閉包中的每個函數依賴均可以從F根據Armstrong公理推導出來。但惋惜的是,其閉包是一個NP徹底問題。

屬性集 X 關於函數依賴集 F 的閉包\(X_F^+\)

\[X_F^+=\{A|X\rightarrow能由F根據Armstrong公理推導出的\} \]

求閉包的方法

求屬性集 X 關於 U 上的函數依賴集F的閉包$ X_F^+$

輸入: \(X,F\)

輸出:$ X_F^+ $

  1. \(X^i=X,i=0\)
  2. 求 B,這裏 $B={A|(∃V,∃W,V→W∈F∧V⊆X^i∧A∈W)} $;
  3. $X{i+1}=B⋃Xi $;
  4. 判斷是否 $ X{i+1}=Xi $
  5. 若相等或 $ X^i=U\(,則\) X^i \(就是\) X_F^+$, 算法終止;
  6. 若否,則$ i=i+1$,返回第(2)步。

對於該算法, 令\(a_i=|X^i|,{a_i}\)造成一個步長大於1的嚴格遞增的序列,序列的上界是 \(| U|\),所以該算法最多 \(| U | - |X|\) 次循環就會終止。

極小函數依賴集

定義

image-20210102170358956

極小化過程

  • 逐一檢查 \(F\) 中各函數依賴\(FD_i\)\(X→Y\),若\(Y =A_1 A_2 … A_k,k >2\), 則用$ {X→A_j |j=1,2,…,k} $來取代 \(X →Y\)
  • 逐一檢查\(F\) 中各函數依賴\(FD_i\)\(X→A\),令 \(G =F -\{ X→A \}\),若\(A\in X_{G^+}\), 則從F 中去掉此函數依賴。(由於 \(F\)與$G \(等價的充分必要 條件是\)A\in X_G^+$ )
  • 逐一取出F 中各函數依賴\(FD_i\)\(X→A\),設\(X = B_1B_2…B_m\) ,逐一考查\(B_i (i=l,2,…,m)\),若\(A \in(X - B_i )_{F^+}\) ,則以$ X-B_i$ 取 代$ X\(,(由於 F與\)F-{X-A}⋃{Z-A}\(等價的充要條件是\)A\in Z _F^+$ ,其中$Z = X- B_i $)

模式的分解

無損鏈接性

分解以後能夠用天然鏈接恢復本來的模式。

image-20210102171529634

無損鏈接的斷定

image-20210102171604298

例如上圖中,學院決定院長這個函數關係是存在的,知足了定理中的一個條件,因此該分解就是無損鏈接的分解。

保持函數依賴的分解

image-20210102171955005

須要知足的條件

  • \(U=U_1\cup U_2\)
  • \(F^+=(F_1\cup F_2)^+\)

充分條件:若是F上的每個函數依賴都在其分解後的某一個關係上成立,則這個分解是保持依賴的。

例子

image-20210102172144128

關於模式分解的幾個重要事實

  • 若分解要求保持函數依賴,總能夠達到3NF,不必定能到BCNF;
  • 若分解既保持函數依賴,又具備無損鏈接,能夠到3NF,不必定到BCNF;
  • 若分解只要求具備無損鏈接,必定能夠達到4NF.

image-20210102172332148

ER 圖

Entity-Relationship,有三個組成部分:實體、屬性、聯繫。

用來進行關係型數據庫系統的概念設計。

E-R有意思的一點在於其將實體之間的關係也實例化了,同時關係也能擁有屬性。

image-20210102103917705

這裏的選修關係就存在成績屬性。但也能夠當作關係連接的實體所定義的屬性是成績。

實體的三種聯繫

包含一對一,一對多,多對多三種。

  • 若是 A 到 B 是一對多關係,那麼畫個帶箭頭的線段指向 B;
  • 若是是一對一,畫兩個帶箭頭的線段;
  • 若是是多對多,畫兩個不帶箭頭的線段。

下圖的 Course 和 Student 是一對多的關係。

表示出現屢次的關係

一個實體在聯繫出現幾回,就要用幾條線鏈接。

下圖表示一個課程的先修關係,先修關係出現兩個 Course 實體,第一個是先修課程,後一個是後修課程,所以須要用兩條線來表示這種關係。

聯繫的多向性

雖然老師能夠開設多門課,而且能夠教授多名學生,可是對於特定的學生和課程,只有一個老師教授,這就構成了一個三元聯繫。

表示子類

用一個三角形和兩條線來鏈接類和子類,與子類有關的屬性和聯繫都連到子類上,而與父類和子類都有關的連到父類上。

實體與屬性的劃分原則:現實世界的事物能做爲屬性對待的儘可能做爲屬性對待。

  • 做爲屬性,不能再具備須要描述的性質
  • 屬性不能與其餘實體有聯繫

ER圖的集成

  • 合併,解決各個分ER圖之間的衝突,將分E-R圖合併起來生成初步E-R圖
  • 修改和重構。消除沒必要要的冗餘,生成基本E-R圖

在合併E-R圖的時候會遇到三種衝突:

  • 屬性衝突
  • 命名衝突
  • 結構衝突

數據庫設計

數據庫設計分爲六個階段

  1. 需求分析階段
  2. 概念設計階段
  3. 邏輯結構設計階段
  4. 物理結構設計
  5. 數據庫實施
  6. 數據庫運行和維護

需求分析

準確瞭解和分析用戶需求,包括數據處理,需求分析是整個設計過程的基礎,是最困難和最耗費時間的一步。

數據字典

數據字典是進行詳細的數據收集和數據分析所得到的主要成果,它是關於數據庫中數據的描述,即元數據,而不是數據自己。數據字典是在需求分析階段創建,在數據庫設計的過程當中不斷的修改,充實,完善的。

數據字典多包括這麼幾個部分:

  • 數據項:是數據的最小組成單位,若干個數據項能夠組成一個數據結構。
  • 數據結構:反映了數據之間的組合關係,一個數據結構能夠由若干個數據項組成,也能夠由若干個數據結構組成。
  • 數據流:是數據結構在系統內的傳輸路徑。
  • 數據存儲:是數據結構停留和保存的地方,也是數據的來源和去向。
  • 處理過程:通常用斷定表或者斷定樹來描述。

數據字典經過對數據項和數據結構的定義來描述數據流,數據存儲的邏輯內容。

概念結構設計階段

概念結構設計是整個數據庫設計的關鍵,它經過對用戶需求進行綜合,概括和抽象,造成一個獨立於具體數據庫管理系統以外的概念模型。

包括[ER圖](#ER 圖)的設計。

邏輯結構設計階段

將概念結構模型轉換爲某個數據庫管理系統 DBMS 支持的數據模型,並對其進行優化。

物理結構設計階段

是爲邏輯數據模型選取一個最適合應用環境的物理結構,包括存儲結構和存儲方法。

數據庫實施階段

在數據庫實施階段,設計人員運用數據庫管理系統提供的數據庫語言及其宿主語言,根據邏輯設計和物理結構設計的結果創建數據庫,編寫調試應用程序,組織數據入庫,並進行試運行。

數據庫運行和維護階段

通過試運行以後便可投入正常使用。

相關文章
相關標籤/搜索