我們在資料庫表設計時,經常說,某某表要遵循第三正規化。下面通過例項介紹第一,第二,第三正規化
所謂第一正規化,就是資料表的列不可再分。
看下面資料表,對於選課列明顯是可以再分的,所以它是違反第一正規化的。
學號姓名
選課10001
張三數學,語文,英語
10002
李四語文,英語
10003
王五語文,英語,歷史
第二正規化是指,首先滿足第一正規化,並且表中非主鍵列不存在對主鍵的部分依賴。
看下面的學生選課表:
學號課程
成績課程學分
10001
數學100
610001
語文90
210001
英語85
310002
數學90
610003
數學99
610004
語文892
表中主鍵為 (學號,課程),我們可以表示為 (學號,課程) -> (成績,課程學分), 表示所有非主鍵列 (成績,課程學分)都依賴於主鍵 (學號,課程)。 但是,表中還存在另外乙個依賴:(課程)->(課程學分)。這樣非主鍵列 『課程學分『 依賴於部分主鍵列 』課程『, 所以上表是不滿足第二正規化的。
我們把它拆成如下2張表:
學生選課表:
學號課程
成績10001
數學100
10001
語文90
10001
英語85
10002
數學90
10003
數學99
10004
語文89
課程資訊表:
課程課程學分數學6
語文3英語2
那麼上面2個表,學生選課表主鍵為(學號,課程),課程資訊表主鍵為(課程),表中所有非主鍵列都完全依賴主鍵。不僅符合第二正規化,還符合第三正規化。
再看這樣乙個學生資訊表:
學號姓名
性別班級
班主任10001張三男
一班小王
10002李四男
一班小王
10003王五男
二班小李
10004
張小三男
二班小李
上表中,主鍵為:(學號),所有字段 (姓名,性別,班級,班主任)都依賴與主鍵(學號),不存在對主鍵的部分依賴。所以是滿足第二正規化。
第三正規化定義是,滿足第二正規化,並且表中的列不存在對非主鍵列的傳遞依賴。
對於上面的學生資訊表,雖然滿足第二正規化,所有欄位都依賴主鍵(學號),但是,表中存在乙個傳力依賴,(學號)->(班級)->(班主任)。也就是說,(班主任)這個非主鍵列依賴與另外乙個非主鍵列 (班級)。所以不符號第三正規化。
把這個表拆分成如下2個表,
學生資訊表:
學號姓名
性別班級
10001張三男
一班10002李四男
一班10003王五男
二班10004
張小三男二班
班級資訊表:
班級班主任
一班小王
二班小李
這樣,對主鍵的傳遞依賴就消失了。上面的2個表都符合第3正規化。
對應上面的班級資訊表,完全可以設計成這樣:
班級班主任
班級人數
一班小王
40二班
小李45
這顯然是符合第三正規化的,所有列都依賴主鍵(班級),也不存在傳遞依賴。但是列(班級人數) 顯然可以通過統計方法獲得,出現在這張表,會造成維護困難或者不一致的情況。這就需要更高階別正規化的約束。
什麼是正規化?第一正規化 第二正規化 第三正規化的區別
總結 正規化的含義 符合某種級別的關係模式的集合。表示乙個關係內部的各屬性之間聯絡的合理化程度。可以理解為 資料表的表結構所符合的某種設計標準的級別。第一正規化 是對關係模式的基本要求。不滿足第一正規化的關係,不能稱為關係型資料庫。符合第一正規化的關係,每個屬性都不可以再分割。但是如果僅僅滿足第一正...
第一正規化,第二正規化,第三正規化
第一正規化 存在非主屬性對碼的部分依賴關係 r a,b,c ab是碼 c是非主屬性 b c b決定c c部分依賴於b 第一正規化 定義 如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的 那麼符合第一模式的特點就有 1 有主關鍵字 2 主鍵不能為空,3 主鍵不能重複,4 欄位不可以...
第一正規化,第二正規化,第三正規化
第一正規化 存在非主屬性對碼的部分依賴關係 r a,b,c ab是碼 c是非主屬性 b c b決定c c部分依賴於b 第一正規化 定義 如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的 那麼符合第一模式的特點就有 1 有主關鍵字 2 主鍵不能為空,3 主鍵不能重複,4 欄位不可以...