數據庫系統原理-讀書筆記:範式

範式:

目前存在六種範式,其之間的關係爲:

5NF\subset4NF\subsetBCNF\subset3NF\subset2NF\subset1NF

如圖所示關係:

第一範式(1NF):

若一個關係模式R的所有屬性都是不可分的基本數據項,則R\in1NF。

在任何一個關係數據庫系統中,第一範式是對關係模式最基本的要求。不滿足第一範式的數據庫模式不能稱爲關係數據庫。

但是滿足第一範式的關係模式並不一定是一個好的關係模式。例如,關係模式

SLC(Sno,Sdept,Sloc,Cno,Grade)

其中函數依賴包括:

(Sno,Cno)->Grade

Sno->Sdept

(Sno,Cno)->Sdept

Sno->Sloc

(Sno,Cno)->Sloc

Sdept->Sloc

在其中Sdept和Sloc 部分依賴於(Sno,Cno)。

SLC關係存在以下4個問題:

1、插入異常:假若需要插入一個Sno=2,Sdept=002,Sloc=m,但該學生並未選課,但Cno爲主碼,所以不能插入

2、刪除異常:假如某個學生只選修了一門課,如95002只選擇了3號課程,若他3號課程不選了,則刪除後3號課程就不存在了。

3、數據冗餘度高:如果一個學生選修了10門課程,則Sdept和Sloc需要存10次。

4、修改複雜:某個學生從數學系轉到化學系不僅需要修改Sdept 還需要修改Sdept.

第二範式(2NF)

若關係模式R\in1NF,並且每一個非主屬性都完全函數依賴於R的碼,則R\in2NF

關係模式SLC出現上述問題是因爲Sdept,Sloc,對碼的部分函數依賴。爲了消除這個依賴,可採用投影分解法。

可分解爲:

SC(Sno,Cno,Grade)

SL(Sno,Sdept,Sloc)

這樣非主屬性就完全依賴於碼了。

可是依然存在問題:

1、插入異常:如果某個系因種種原因(例如剛剛成立),目前暫且沒有在校學生,就無法把這個系的信息存入數據庫

2、刪除異常:如果某個系的學生全部畢業了,在刪除該系學生信息的同時,把這個系的信息也丟掉了

3、數據冗餘度大:每個系的住處相同,若該繫有多名學生則住處重複出現多次

4、修改複雜:若系的住處信息發生變化,則需要修改多名學生的住處信息。

 

第三範式(3NF)

如果關係模式R<U,F>中不存在候選碼X,屬性組Y以及非主屬性Z(Z\nsubseteqY),使得X->Y,Y->Z和Y-\>X成立,則R\in3NF

關係模式SL中Sloc傳遞依賴於Sno.爲了消除該傳遞函數依賴,課採用投影分解法。

SL分解爲:

SD(Sno,Sdept)

DL(Sdept,Sloc)

但滿足了三範式的關係模式仍有一定的問題:

例如,在關係模式(S,T,J)中,S表示學生,T表示教師,J表示課程。假設每一教師只教一門課。每門課由若干教師教,某一學生選定某門課,就確定了一個固定的教師。於是有了如下的函數依賴

(S,J)->T

(S,T)->J

T->J

存在的問題:

1、插入異常:如果某個學生剛剛入校,尚未選課,但受主屬性不能爲空的限制,有關信息無法存入數據庫中。

2、刪除異常:如果選修某門課的學生全部畢業了,則在刪除學生元組的同時,相應教師開設該門課程的信息同時丟掉。

3、數據冗餘大:雖然某個老師只教一門課,但選修了該門課的學生元組都要記錄該教師的信息。

4、修改複雜:某個教師開設的某門課程改名後,所有選修了該教師該門課程的學生元組都要進行相應修改。

BC範式(BCNF)

設關係模式R<U,F>,F>\in1NF,如果對於R的每個函數依賴X->Y,若Y\nsubseteqX,則X必含有候選碼,那麼R\inBCNF

關係模式STJ出現上述問題的原因在於主屬性J依賴於T,即主屬性J部分依賴於碼(S,T)使用投影法將其分解。

ST(S,T)

TJ(T,J)

由定義看出,BCNF具有以下性質:

1、所有非主屬性都完全函數依賴於每個候選碼。

2、所有主屬性都完全依賴依賴於每個不包含它的候選碼。

3、沒有任何屬性完全函數依賴於非碼的任何任何一組屬性。

 

第四範式(4NF)

關係模式R<U,F>\in1NF,如果對於R的每個非平凡多值依賴X->->Y(Y\nsubseteqX),X都含有候選碼,則R\in4NF

例如,設學校某一門的課程由多個教授講授,他們使用相同的一套參考書。可以用一個關係模式Teach(C,T,B)表示課程C,教師T,和參考書B之間的關係。

Teach具有唯一候選碼(C,T,B)即全碼,因而Teach\inBCNF,但Teach模式存在一些問題:

1、數據冗餘度大:每一門課程的參考書都是固定的,但在Teach關係中,有多少名任課教師就有多少本參考書被存儲,造成大量數據冗餘。

2、增加操作複雜:當某一課程增加一名任課教師時,該課程有多少本參考書,就必須要插入多少個元組。例如:物理課增加一名教室劉高,需要插入兩個元組:

(物理,劉高,微分方程) (物理,劉高,光學原理)

3、刪除操作複雜:某一門課要去除某一門書,該課程有多少名教師,就必須刪除多少個元組。

例如,數學課去掉《微分方程》書,需要刪除兩個元組:

(數學,鄧軍,微分方程)(數學,陳思,微分方程)

4、修改操作複雜:某一門課程修改一門參考書、該課程有多少名教師、就必須有多少個元組。

之所以產生上述問題,是因爲參考書的的取值和教師的取值是彼此獨立毫無關係的,它們都只取決於課程名。也就是說,該關係模式存在一種多值依賴。

使用投影分解法將其分解爲:

CT(C,T)

CB(C,B)

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章