資料庫正規化區別

2021-07-07 05:38:20 字數 4209 閱讀 7331

概念:

(1) 實體(entity):就是實際應用中要用資料描述的事物,一般是名詞。

(2) 字段(fields):就是一項資料,也就是我們平常所說的「列」。

(4) 鍵(key):可唯一標識一條記錄的乙個欄位或字段集,有時翻譯為「碼」。

(5) 主鍵(primary key):用於唯一標識乙個表中的一條記錄的鍵。每個主鍵應該具有下列特徵:

唯一的。

2.最小 的(盡量選擇最少鍵的組合)。

3.非空。

4.不可更新的(不能隨時更改)

(7) 依賴表(dependent table):也稱為弱實體(weak entity)是需要用父表標識的子表。

(8) 關聯表(associative table):是多對多關係中兩個父表的子表。

(9) 實體完整性:每個表必須有乙個有效的主 鍵。

(10) 參照完整性:沒有不相匹配的外鍵值。

名詞解釋:

函式依賴:

通俗描述:

描述乙個學生的關係,可以有學號(sno),姓名(sname),系名(sdept)等幾個屬性。由於乙個學號只對應乙個學生,乙個學生只在乙個系學習。因此當學號確定之後,姓名和該學生所在系的值也就唯一被確定了,就像自變數x確定之後,相應的函式值f(x)也就唯一地被確定了一樣,稱sno函式決定sname和sdept,或者說sname,sdept函式依賴於sno,記為:sno -> sname, sno -> sdept.

嚴格定義:

設r(u)是屬性集u上的關係模式。x,y是u的子集。若對於r(u)的任意乙個可能的關係r,r中不可能存在兩個元組在x上的屬性值相等,而在y上的屬性值不相等,則稱x函式確定y或者y函式依賴於x。記為x->y。

(如果不知道「關係」、「屬性集」等定義,自己看大學教材去。這裡的定義摘自薩師煊&王珊《資料庫系統概論》第三版)

完全函式依賴:

在r(u)中,如果y函式依賴於x,並且對於x的任何乙個真子集x』,都有y不函式依賴於x』, 則稱y對x完全函式依賴。否則稱y對x部分函式依賴。

舉個例子就明白了。假設乙個學生有幾個屬性

sno 學號

sname 姓名

sdept 系

sage 年齡

cno 班級號

g 成績

對於(sno,sname,sdept,sage,cno,g)來說,g完全依賴於(sno, cno), 因為(sno,cno)可以決定g,而sno和cno都不能單獨決定g。

而sage部分函式依賴於(sno,cno),因為(sno,cno)可以決定sage,而單獨的sno也可以決定sage。

傳遞函式依賴:

在r(u)中,如果x->y, y->z, 則稱z對x傳遞函式依賴。

候選鍵(又稱候選碼,候選關鍵字,碼 ,candidate key):

設k是乙個r(u)中的屬性或屬性集合(注意可以是屬性集合,也即多個屬性的組合),若k完全函式確定u,則k為r的候選鍵(candidate key);

通俗地說就是,能夠確定全部屬性的某個屬性或某組屬性,稱為候選鍵。若候選鍵多於乙個,則選定其中乙個作為主鍵。

主屬性:

包含在任何乙個候選鍵中的屬性,叫做主屬性(prime attribute),不包含在任何候選鍵中的屬性稱為非主屬性或非鍵屬性或非關鍵字段。

例子:在(sno, cno, g)中,sno和cno這倆合起來就是乙個候選鍵,因為每個元組只要確定了sno和cno,則其它所有屬性都可以根據sno和cno來確定。而sno和cno就都是「主屬性」,g是「非主屬性」。由於此例中只有乙個候選鍵,於是只能選擇(sno, cno)作為主鍵。

在(sno,sdept, sname)中,sno是乙個候選鍵,因為只要sno確定了,其它所有屬性也都確定了,如果保證沒有重名的話,則sname也是乙個候選鍵,於是可以選sno或者sname之一作為候選鍵。如果不能保證沒有重名,就不能把sname當成候選鍵,於是就只有sno能夠做主鍵。

正規化:

第一正規化不多說了

指資料庫表的每一列都是不可分割的基本資料項

在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。

第二正規化:

資料庫表中不存在非關鍵字段對任一候選鍵的部分函式依賴,也即所有非關鍵字 段都完全依賴於任意一組候選關鍵字。

2nf的違例只會出現在候選鍵由超過乙個字段構成的表中,因為對單關鍵字欄位不存在部分依賴問題。

例子:(學號, 姓名, 年齡, 課程名稱, 成績, 學分)

候選鍵只有乙個,就是(姓名,課程名稱),則主鍵就是(姓名,課程名稱)

存在如下決定關係:

1:(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)

2:(課程名稱) → (學分)

3:(學號) → (姓名, 年齡)

其中,姓名、年齡、學分是部分依賴於主鍵的,而成績是完全依賴於主鍵的,存在部分依賴關係,所以不滿足第二正規化。

這會造成如下問題

(1) 資料冗餘:

同一門課程由n個學生選修,」學分」就重複n-1次;同乙個學生選修了m門課程,姓名和年齡就重複了m-1次。

(2) 更新異常:

若調整了某門課程的學分,資料表中所有行的」學分」值都要更新,否則會出現同一門課程學分不同的情況。

(3) 插入異常:

假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有」學號」關鍵字,課程名稱和學分也無法記錄入資料 庫。

(4) 刪除異常:

假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同 時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。

問題就在於存在非主屬性對主鍵的部分依賴

解決辦法:把原表(學號, 姓名, 年齡, 課程名稱, 成績, 學分)分成三個表:

學生:student(學號, 姓名, 年齡);

課程:course(課程名稱, 學分);

選課關 系:selectcourse(學號, 課程名稱, 成績)。

第三正規化:

在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合第三正規化

出現傳遞依賴a->b->c,即主鍵a可以確定出某一非關鍵字段b,而b又可以確定出c,這意味著c依賴於乙個非關鍵字段b。因此第三正規化又可描述為:表中不存在可以確定其他非關鍵字的非鍵字段

例子:表:(學號, 姓名, 年齡, 所在學院, 學院地點, 學院**)

該表中候選字段只有「學號」,於是「學號」做主鍵。由於主鍵是單一屬性,所以不存在非主屬性對主鍵的部分函式依賴的問題,所以必然滿足第二正規化。但是存在如下傳遞依賴

(學號) → (所在學院) → (學院地點, 學院**)

學院地點和學院**傳遞依賴於學號,而學院地點和學院**都是非關鍵字段,即表中出現了「某一非關鍵字段可以確定出其它非關鍵字段」的情況,於是違反了第三正規化。

解決辦法:

把原表分成兩個表:

學生:(學號, 姓名, 年齡, 所在學院);

學院:(學院, 地點, **)。

bcnf:

bcnf意味著在關係模式中每乙個決定因素都包含候選鍵,也就是說,只要屬性或屬性組a能夠決定任何乙個屬性b,則a的子集中必須有候選鍵。bcnf正規化排除了任何屬性(不光是非主屬性,2nf和3nf所限制的都是非主屬性)對候選鍵的傳遞依賴與部分依賴。

例子:

例子二:

假設倉庫管理關係表為storehousemanage(倉庫id, 儲存物品id, 管理員id, 數量),且有乙個管理員只在乙個倉庫工作;乙個倉庫可以儲存多種物品。這個資料庫表中存在如下決定關係:

(倉庫id, 儲存物品id) →(管理員id, 數量)

(管理員id, 儲存物品id) → (倉庫id, 數量)

所以,(倉庫id, 儲存物品id)和(管理員id, 儲存物品id)都是storehousemanage的候選關鍵字,表中的唯一非關鍵字段為數量,它是符合第三正規化的。但是,由於存在如下決定關係:

(倉庫id) → (管理員id)

(管理員id) → (倉庫id)

倉庫i是決定因素,但倉庫id不包含候選鍵(candidate key,也就是候選碼,簡稱碼)。

同樣的,管理員id也是決定因素,但不包含候選鍵。

所以該錶不滿足bcnf。

3nf和bcnf是在函式依賴的條件下對模式分解所能達到的最大程度。乙個模式中的關係模式如果都屬於bcnf,那麼在函式依賴範圍內,它已經實現了徹底的分離,已消除了插入和刪除的異常。3nf的「不徹底」性表現在可能存在主屬性對鍵的部分依賴和傳遞依賴。

資料庫 各個正規化的區別

第一正規化 關係模式中,每個屬性不可再分。屬性原子性 第二正規化 非主屬性完全依賴於主屬性,即消除非主屬性對主屬性的部分函式依賴關係。第三正規化 非主屬性對主屬性不存在傳遞函式依賴關係。bncf正規化 在第三正規化的基礎上,消除主屬性之間的部分函式依賴 第一正規化 1nf 在關係模式r中的每乙個具體...

資料庫 資料庫正規化

關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...

資料庫正規化 三正規化

所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...