資料庫三正規化(上)

2021-06-08 09:19:07 字數 4174 閱讀 5180

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。設計正規化聽起來好像很難懂,其實不然通過一些例子我們可以清楚明白的學會設計正規化。thematter個人**

正規化說明:

第一正規化(1nf)

:資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。

例如,如下的資料庫表是符合第一正規化:

欄位1

欄位2

欄位3

欄位4

?

?

?

?

而這樣的資料庫表是不符合第一正規化的:

欄位1

欄位2

欄位3

欄位4

?

?

欄位3.1

欄位3.2

?

在當前的任何關聯式資料庫管理系統(

dbms

)中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些

dbms

不允許你把資料庫表的一列再分成二列或多列。因此想設計出不符合第一正規化的資料庫是不可能的。

第二正規化(

2nf):第二正規化(

2nf)是在第一正規化(

1nf)的基礎上建立起來的,即滿足第二正規化(

2nf)必須先滿足第一正規化(

1nf)。資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴(部分函式依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴於任意一組候選關鍵字。

假定選課關係表

selectcourse(學號,

姓名,年齡,

課程名稱,成績

,學分),關鍵字為組合關鍵字(學號

,課程名稱

),因為存在如下決定關係:

(

學號

,課程名稱

) → (姓名,

年齡,成績,

學分

)

這個資料庫表不滿足第二正規化,因為存在如下決定關係:

(

課程名稱

) → (

學分

)(學號

) → (姓名,

年齡

)

即存在組合關鍵字中的字段決定非關鍵字的情況。

由於不符合

2nf,這個選課關係表會存在如下問題:

(1)

資料冗餘:

同一門課程由

n個學生選修,"學分

"就重複

n-1次;同乙個學生選修了

m門課程,姓名和年齡就重複了

m-1次。

(2)

更新異常:

若調整了某門課程的學分,資料表中所有行的"學分

"值都要更新,否則會出現同一門課程學分不同的情況。

(3)

插入異常:

假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號

"關鍵字,課程名稱和學分也無法記錄入資料庫。

(4)

刪除異常:

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

把選課關係表

selectcourse

改為如下三個表:

學生:

student(學號,

姓名,年齡)

課程:

course(

課程名稱,學分

);

選課關係:

selectcourse(學號,

課程名稱,成績

)。

這樣的資料庫表是符合第二正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。

第三正規化(

3nf):滿足第三正規化(

3nf)必須先滿足第二正規化(

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

"a → b → c"

的決定關係,則

c傳遞函式依賴於

a。因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:

關鍵字段

→非關鍵字段

x →非關鍵字段

y

假定學生關係表為

student(學號,

姓名,年齡,

所在學院

,學院地點

,學院**

),關鍵字為單一關鍵字"學號

",因為存在如下決定關係:

(

學號

) → (姓名,

年齡,所在學院

,學院地點

,學院**

)

這個資料庫是符合

2nf的,但是不符合

3nf,因為存在如下決定關係:

(

學號

) → (

所在學院

) → (

學院地點

,學院**

)

即存在非關鍵字段

"學院地點"、

"學院**

"對關鍵字段"學號

"的傳遞函式依賴。

它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況,這裡就不詳細的介紹

資料庫正規化 三正規化

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

資料庫三正規化

資料庫的三正規化 1n 關係r中的屬性都是不可分割的項.2n 在1n的基礎上,每個非主屬性完全函式依賴於碼.3n 在2n的基礎上,每乙個非主屬性既不部分依賴於碼也不傳遞依賴於碼.1n 消除非主屬性對碼的部分函式依賴 2n 消除非主屬性對碼的傳遞函式依賴 3n 消除主屬性對碼的部分和傳遞函式依賴 bc...

資料庫三正規化

1 第一正規化 1nf 無重複的列 所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化 ...