資料庫之三大正規化

2021-07-08 13:50:11 字數 1611 閱讀 9479

在前面我們已經介紹了

屬性值的概念,我們說,它是「不可分的」。而第一正規化要求屬性也不可分。那麼它和屬性值不可分有什麼區別呢?給乙個例子:

name

address

age小明

山東省濟寧市

13小紅

遼寧省大連市

12表中的address屬性實際上的可分的

這種情況不滿足第一正規化。不滿足第一正規化的資料庫,不是關聯式資料庫!所以,我們在任何關聯式資料庫管理系統中,做不出這樣的「表」來。

聽起來好像很神秘,其實真的沒什麼。

一 個候選碼中的主屬性也可能是好幾個。如果乙個主屬性,它不能單獨做為乙個候選碼,那麼它也不能確定任何乙個非主屬性。給乙個反例:我們考慮乙個小學的教務管理系統,學生上課指定乙個老師,一本教材,乙個教室,乙個時間,大家都上課去吧,沒有問題。那麼資料庫怎麼設計?(學生上課表)

姓名課程

老師職稱

教材教室

時間小明

數學上老王

講師數學1

1208:00

乙個學生上一門課,一定在特定某個教室。所以有(學生,課程)->教室

乙個學生上一門課,一定是特定某個老師教。所以有(學生,課程)->老師

乙個學生上一門課,他老師的職稱可以確定。所以有(學生,課程)->老師職稱

乙個學生上一門課,一定是特定某個教材。所以有(學生,課程)->教材

乙個學生上一門課,一定在特定時間。所以有(學生,課程)->上課時間

因此(學生,課程)是乙個碼(聯合主鍵)。

然而,乙個課程,一定指定了某個教材,那麼就有課程->教材。(學生,課程)是個碼,課程卻決定了教材,這就叫做不完全依賴,或者說部分依賴。出現這樣的情況,就不滿足第二正規化!

不滿足第二正規化會產生以下問題:

1、要新增加一門課程叫「微積分」,教材是《大學數學》,怎麼辦?學生還沒選課,而學生又是主屬性,主屬性不能空,課程無法記錄(

插入異常)

2、下學期沒學生學數學1了,要學數學2,那麼表中將不存在課程數學上,也就沒了數學1。(

刪除異常)

3、若要更換課程教材,如果有10000人選課,則要修改10000條資料(修改異常)

解決方法:

將上面的表分成兩張表:

學生選課 姓名

課程老師

職稱教室

時間小明

數學上老王

講師120

8:00

課程表

課程教材

數學上數學1

上面的學生選課表符合第二正規化,但不符合第三正規化,原因就在於職稱這個屬性有傳遞依賴。

因為職稱不依賴與主鍵,而僅僅依賴於老師,而老師依賴於主鍵,這就產生的傳遞依賴。

這會產生以下問題:

1、老師公升級了,變教授了,要改資料庫,表中有n條,改了n次……(修改異常)

2、沒人選這個老師的課了,老師的職稱也沒了記錄……(刪除異常)

3、新來乙個老師,還沒分配教什麼課,他的職稱無法記錄?……(插入異常)

那應該怎麼解決呢?和上面一樣,再分成兩個表: 姓名

課程老師

教室時間

小明數學上

老王120

8:00

老師職稱

老王講師

資料庫設計之三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫設計之三大正規化

背景 表設計後,很可能結構不合理,出現資料重複儲存,簡稱資料的冗餘,這對資料的增刪改查帶來很多後患,所以我們需要審核是否合理,如何審核呢?需要一些有關資料庫設計的理論指導規則,這些規則業界簡稱資料庫的正規化。兩個重要概念 1 部分函式依賴 1 存在資料冗餘 2 新增資料會有異常 3 更新資料會有異常...

資料庫學習之 三大正規化

為什麼會出現三大正規化呢?什麼是三大正規化?首先我們需要來理解以下的基本概念 關係 資料庫中的一張二維表 資料依賴 資料間的相互關係 函式依賴 屬於資料依賴的乙個分支,前者資料值確定後,後者資料值唯一指定,也就是說後者資料的值依賴前者!例如 由於乙個學號只對應乙個學生,乙個學生只在乙個系,所以當學號...