第一正規化:資料表的列不可再分
eg:看下面資料表,對於選課列明顯是可以再分的,所以它是違反第一正規化的。
+-------------------------------+
|學號 |姓名 |選課 |
|-------+------+----------------|
|10001 |張三 |數學,語文,英語|
|-------+------+----------------|
|10002 |李四 |語文,英語 |
|-------+------+----------------|
|10003 |王五 |語文,英語,歷史|
+-------------------------------+
第二正規化:在滿足第一正規化的基礎上,表中的非主鍵列不存在對主鍵的部分依賴
也就是受非主鍵列必須全部依賴於主鍵,通過主鍵可以唯一標識非主鍵列
看下面的學生選課表:
+---------------------------+
|學號 |課程 |成績 |課程學分|
|------+-----+-----+--------|
|10001 |數學 |100 |6 |
|------+-----+-----+--------|
|10001 |語文 |90 |2 |
|------+-----+-----+--------|
|10001 |英語 |85 |3 |
|------+-----+-----+--------|
|10002 |數學 |90 |6 |
|------+-----+-----+--------|
|10003 |數學 |99 |6 |
|------+-----+-----+--------|
|10004 |語文 |89 |2 |
+---------------------------+
表中主鍵為 (學號,課程),我們可以表示為(學號,課程)->(成績,課程學分),
表示所有非主鍵列 (成績,課程學分)都依賴於主鍵 (學號,課程)。 但是,表中
還存在另外乙個依賴:(課程)->(課程學分)。這樣非主鍵列 『課程學分』依賴於部分主鍵列 『課程』, 所以上表是不滿足第二正規化的。
我們把它拆成如下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正規化。 資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫三大正規化
1 第一正規化 1nf 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現...
資料庫三大正規化
第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...