前言
資料庫課本上都把正規化寫到五正規化了,但是實際應用中,滿足三正規化已經足夠了,五正規化太多餘了。
三種正規化是條件遞增的聯絡(即後乙個正規化是在前乙個條件滿足的情況下引入新的條件)。
例如
正規化滿足條件
一正規化(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不出這樣的表 表...