資料庫設計三正規化的舉例說明

2021-08-28 03:00:20 字數 1893 閱讀 1261

前言

資料庫課本上都把正規化寫到五正規化了,但是實際應用中,滿足三正規化已經足夠了,五正規化太多餘了。

三種正規化是條件遞增的聯絡(即後乙個正規化是在前乙個條件滿足的情況下引入新的條件)。

例如

正規化滿足條件

一正規化(1nf)

條件a二正規化(2nf)

條件a,條件b

三正規化(3nf)

條件a,條件b,條件c

下面詳細解釋一下

第一正規化(1nf)

滿足條件:

原子性,即資料庫表裡的字段都是不可分割的

例如下面學生表的設計明顯不滿足要求,年級專業是可以再分的,就不能偷懶放在一塊

學號姓名

年齡年級專業

201511216776

王玉偉20

15級軟工

符合第一正規化的做法為

學號姓名

年齡年級

專業201511216776

王玉偉20

15級軟工

第二正規化(2nf)

滿足條件:

原子性,即資料庫表裡的字段都是不可分割的

表中必須有主鍵

其他非主屬性必須完全依賴主鍵(不能依賴主鍵一部分,這是針對聯合主鍵說的)

針對條件三解釋一下(假設學號為主鍵)

我們以學號為主鍵的時候,確保該學生別的欄位都完全依賴學號,不能出現下面這種課程名不依賴學號而依賴課程號的設計。

學號姓名

年齡課程名

課程號201511216776

王玉偉20

英語20003

符合第二正規化的做法

學號姓名

年齡201511216776

王玉偉20

課程名課程號

英語20003

解釋一下聯合主鍵中的要求

下面是我之前設計的乙個表,學號sno與課程號cno做聯合主鍵,而第二正規化要求的完全依賴,下表並沒有做到從這個表中可以看出,姓名依賴學號,課程名依賴課程號,但是這都是依賴了一部分,只有成績對學號和課程號都依賴,因此是不符合第二正規化的

符合第二正規化的設計為(即拆成三個表,只展示一下表的字段)

snocno

grade

cnocname

snosname

第三正規化(3nf)

滿足條件:

原子性,即資料庫表裡的字段都是不可分割的

表中必須有主鍵

其他非主屬性必須完全依賴主鍵(不能依賴主鍵一部分,這是針對聯合主鍵說的)

非表中主鍵字段完全直接依賴主鍵,不能是傳遞依賴

例如下表,學院依賴於主鍵學號,但是學院位址 依賴於學院,這樣對主鍵就是不是直接依賴(這裡可能會有人疑問位址也是能拆成省市區的字段,這裡不拆也是可以的,因為表示的就是位址字段)

學號姓名

年齡年級

學院學院位址

201511216776

王玉偉20

15級計算機學院

內蒙古呼和浩特市賽罕區

符合第三正規化的做法(刪去有間接依賴的字段)

學號姓名

年齡年級

學院201511216776

王玉偉20

15級計算機學院

資料庫連線 舉例說明

表1 tb1結構及值 num name 1 name1 2 name2 2 name3 4 name4 表2 tb2結構及值 num name 1 name1 2 name2 3 name3 執行左連線 select from tb1 left join tb2 on tb1.num tb2.num...

資料庫三大正規化(詳細舉例說明一看就會)

資訊重複 更新異常 插入異常 無法正常顯示資訊 刪除異常 丟失有效的資訊 舉例說明 在上面表中 家庭資訊和學歷資訊不滿足原子性要求,不滿足第一正規化,進行調整如下 舉例說明 在上述表中,同乙個訂單號可以包括不同產品號,因此主鍵必須是 訂單號 產品號 聯合組成。但可以發現 產品號 產品數量 產品 與 ...

資料庫設計 三正規化 解釋 舉例

1nf 字段不可分 2nf 有主鍵,非主鍵字段依賴主鍵 3nf 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴 不符合第一正規化的例子 關聯式資料庫中create不出這樣的表 表...