資料庫三正規化

2021-07-01 19:17:17 字數 2173 閱讀 5633

關係型資料庫

是現在廣泛應用的資料庫型別,對關係型資料庫的設計就是對資料進行組織化和結構化的過程。對於小規模的資料庫我們處理起來還是比較輕鬆地,但是隨著資料庫規模的擴大我們將發現使用者操控資料庫的

sql語句將變得笨拙、複雜。更糟糕的是很有可能導致資料不完整,不準確。所以我們有必要將資料設計的更加符合規範。

怎樣使我們的資料庫更加規範呢,前人總結了三個正規化(其實一共有五個,但是一般的資料庫只需滿足三個就已經很高效了。)

注意:斜體字部分為邏輯性語言,不容易理解,但很準確;粗體字部分為通俗語言,容易理解,但有失準確。 l

第一正規化(

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

換句話說:能分就分,分到不能分為止!例1

: 原表1

上表中「地點」欄位中的值就不符合第一正規化。正確的做法應該是把大地點和小地點分開,保持每列的原子性,即不可分割性,如下表:

修改後的表

l第二正規化(

2nf):在滿足第一正規化的基礎上,資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴(部分函式依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況),也即所有非關鍵字段都完全依賴於任意一組候選關鍵字。(另外,所有單關鍵字的資料庫表都符合第二正規化,因為不可能存在組合關鍵字。)

也就是說:

1、盡可能的使用單關鍵字吧!

2、每個表只表述乙個事,別傻乎乎的把所有資訊都放到乙個表裡!例2

: 原表2

上表滿足第一正規化,即每個字段具有不可再分性。但是不滿足第二正規化。從表可以看出組合關鍵字為(學號,課程名稱),但表中「學分」完全依賴「課程名稱」,而「姓名」和「年齡」完全依賴「學號」。也就是說在這一張表裡描述了兩個事情:學生資訊、課程資訊。

這樣的後果是

(1) 

資料冗餘:同一門課程由

n個學生選修,"學分

"就重複

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

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

m-1次。

(2) 

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

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

(3) 

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

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

(4) 

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

修改後如下:

學生表課程表

成績表

l第三正規化(

3nf):在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的

傳遞函式依賴

則符合第三正規化。所謂傳遞函式依賴,指的是如果存在

"a →b →

c"的決定關係,則

c傳遞函式依賴於

a。也就是說表中的字段和主鍵直接對應不依靠其他的中間字段。

說白了:決定某字段值的必須是主鍵!

3:原表3

可以看出表中的學院地點依賴於學院,學院依賴於學號,學院**同理。所以這不符合第三正規化,這樣的結果同樣會造成上述不良後果

(1) 

資料冗餘:同乙個「學院」由

n個學生,「學院地點」和「學院**」就重複

n-1次。

(2) 

更新異常:若調整了某學院的地點,資料表中所有有關行的「學院地點」值都要更新,否則會出現同一學院但是地點卻不同的情況。

(3) 

(4) 

刪除異常:假設一批學生已經畢業,這些學生資訊記錄就應該從資料庫表中刪除。但是,與此同時,學院、學院地點和學院**資訊也被刪除了。很顯然,這也會導致插入異常。

修改後如下:

學生表學院表

結束語:通過運用三個正規化可以使你的資料庫更加準確、高效。但是在關聯式資料庫中,還有多值依賴,聯接依賴的問題,從而提出了第四正規化,第五正規化等更高一級的規範化要求。

資料庫正規化 三正規化

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

資料庫三正規化

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

資料庫三正規化

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