深入淺出資料庫設計三正規化
設計良好結構的資料庫,可以有效減小資料冗餘,減少增刪改中出現的問題。深入理解資料庫設計的三正規化,對於設計“健壯的資料庫“十分有必要。資料庫三正規化是設計資料庫 時參考的準則,接下來我們一一進行介紹:
一、資料庫第一正規化:
資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。(保持資料的原子性)
資料原子性很好理解,就是表中的欄位不可再分。符合資料庫第一正規化的表,每個欄位表意明確,看個例子:
這是一張簡單的員工資訊表,其中有工號、姓名、電話三個欄位。通過電話這個欄位獲得的資訊有可能是家庭電話,或是工作地點的電話,或是手機,因此表達的資訊並不明確,我們可以改成這樣:
那這樣改完以後,表中所表達的資訊就非常明確了。
二、資料庫第二正規化:
在滿足第一正規化的基礎上,實體的每個非主鍵屬性完全函式依賴於主鍵屬性(消除部分依賴)
主鍵:凡是接觸過資料庫的人,肯定都會知道主鍵,主鍵明確標識了每條記錄,一般是一個欄位,也可以由兩個或兩個欄位組成。
依賴:對於X的每個值,Y都有一個值與之對應,反過來則不一定不成立,這叫做X函式決定Y,Y函式依賴X(X往往是主鍵)。
還拿上面的那張表舉來說,對於每個工號,都有一個姓名與之對應,即工號決定姓名,姓名依賴工號;但由於員工之間可能有重名,一個姓名可能對應多個工號,所以姓名不能決定工號。
部分依賴:當主鍵由兩個或兩個以上欄位構成,而表中的某些資訊通過主鍵的一個欄位就能唯一確定,我們稱這樣的依賴關係為部分依賴,比如這個例子:
學生選課(學號,姓名,專業,課程號,課程名,成績),該表中一個學生可以選多門課,一門課有多個學生。學號和課程號可以唯一確定一條記錄,因此用學號和課程號做主鍵。
表中的姓名、專業通過主鍵中的學號就能唯一確定,而課程名通過課程號唯一確定,這就是部分依賴,這樣的設計不符合第二正規化。
不符合第二正規化會帶來哪些問題呢?
1、資料資訊冗餘,可見上表
2、增刪改會出現問題,比如有一門《微機原理》沒有人選,那麼由於缺少學號(主鍵之一)那麼這門課就不能出現在表裡。
如何解決呢,我們可以用關係分解的方法消除部分依賴,將上表改成如下三張表:
資料庫第三正規化:
在滿足第二正規化的基礎上,在實體中不存在非主鍵屬性傳遞函式依賴於主鍵屬性。(表中欄位[非主鍵]不存在對主鍵的傳遞依賴)
傳遞依賴:A依賴於B,B依賴於C,就可以說A依賴C。看這樣一張表:
這張表中有如下決定關係: 學號-->姓名,性別,系號-->決定系名,宿舍號-->決定宿舍電話,也有 學號-->系名,學號-->宿舍電話。
在這樣一張表中則存在著傳遞依賴。也就是系名依賴系號,系號依賴學號,那麼間接的系名依賴學號,宿舍號、宿舍電話和學號之間也有同樣的關係。這樣設計表的同樣會帶來資料冗餘,操作異常等問題。那麼我們同樣可以用關係分解的分解的方法來消除傳遞依賴,將這張表分成三張表:
這就是資料可設計的三正規化了,在設計資料表的過程中注意三正規化的應用,多多實踐,有助於對三正規化有更深入的理解。
相關推薦
深入淺出資料庫設計三正規化
設計良好結構的資料庫,可以有效減小資料冗餘,減少增刪改中出現的問題。深入理解資料庫設計的三正規化,對於設計“健壯的資料庫“十分有必要。資料庫三正規化是設計資料庫 時參考的準則,接下來我們一一進行介紹: 一、資料庫第一正規化: 資料庫表的每一列
JDBC章節總結(.資料庫設計三正規化、如何設計資料庫表)
1.介面可以降低程式的耦合度,提高程式的擴充套件力* 答:如果需要擴充套件介面功能的時候,直接建立一個實現介面功能的物件就可以了。 2.JDBC是一套專門用來操作資料庫的介面* 見名知意,java databases connection java 虛擬機器與資料庫之間的連線,需
資料庫設計三正規化
第一正規化(1NF):強調的是列的原子性,即列不能夠再分成其他幾列。 問:怎麼知道列還能不能分? 答:靠生活常識與經驗 舉例1 id 地址 1 中國廣東 2
資料庫設計三正規化的舉例說明
前言 資料庫課本上都把正規化寫到五正規化了,但是實際應用中,滿足三正規化已經足夠了,五正規化太多餘了。 三種正規化是條件遞增的聯絡(即後一個正規化是在前一個條件滿足的情況下引入新的條件)。 例如 正規化 滿足條件
資料庫設計三正規化理解
從資料庫理論上講,一共有8種正規化(normal form),分別是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,
資料庫設計 第一正規化 二 三 INF 2NF 3NF 區別 詳解 傳遞依賴
關於資料庫的設計準則,平時我也就知道怎麼去做。當有人問起我第三正規化的時候,我還真不知道怎麼去表述了。找到這篇解說,覺得概念和例子都講得不錯,收藏起來,以備後用。 I、關係資料庫設計正規化介紹 1.1 第一正規化(1NF)無重複的列 所謂第一正規化(1NF
資料庫設計三大正規化和五大約束
【三大正規化】 第一正規化(1NF): 資料表中的每一列(欄位),必須是不可拆分的最小單元,也就是確保每一列的原子性。 例如: userInfo: '山東省煙臺市 1318162008' 依照第一正規化必須拆分成 &
資料庫的三正規化和約束
一.資料庫中的正規化: 正規化, 英文名稱是 Normal Form,它是英國人 E.F.Codd(關係資料庫的老祖宗)在上個世紀70年代提出關係資料庫模型後總結出來的,正規化是關係資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法,以下就是對這三個正規化的基本介紹:
轉:資料庫設計三大正規化
http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須
關係資料庫的三正規化
雖然三正規化在設計表結構時經常有意無意都會用到,但是真正定義卻總是記不住 特意再次回顧下定義並記錄在此,方便複習 1、第一正規化(1NF) 在任何一個關係資料庫中,第一正規化(1NF)是對關係模式的基本要求,不滿足第一正規化(1NF)的資料庫就不是關係資料
資料庫設計三大正規化簡析
為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。 在實際開發中最為常見的設計正規化有三
資料庫設計反正規化
1.正規化 1.1 1NF-3NF 定義 1NF確保原子性(Atomicity)原子性的粒度、原子性的價值(1正規化:單值,並且把值當做單值用,建議不要把值拆開) 2NF檢查對鍵的完全依賴價值在在於控制資料冗餘和查詢效能 3NF檢查屬性的獨立性 規範化的價值合理規範化的模型可應對需求變更 規範
資料庫設計三大正規化
為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。 在實際開發中最為常見的設計正規化有三個: 1.第一正規化(確保每
關係型資料庫設計三大正規化
1.何為資料庫正規化? 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同 規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。 目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第
資料庫設計:正規化與反正規化
我們在設計資料庫的過程中,往往要用到正規化或反正規化的設計模式。熟悉地掌握正規化與反正規化的要領,學會在實際開發中恰當地混合使用正規化與反正規化,才能設計出結構合理,執行高效的資料庫。 下面就以一個經典的例子進行講述正規化與反正規化: 職工-部門表: 部門-部門
資料庫的三正規化是什麼?
第一正規化(1NF):欄位具有原子性,不可再分。所有關係型資料庫系統都滿足第一正規化) 資料庫表中的欄位都是單一屬性的,不可再分。例如,姓名欄位,其中的姓和名必須作為一個整體,無法區分哪部分是姓
資料庫設計一二三四正規化有何區別
範化是在識別資料庫中的資料元素、關係、以及定義所需的表和各表中的專案這些初始化工作之後的一個細化的過程。常見的正規化有1NF 2NF 3NF BCNF以及4NF。 1NF,第一正規化。第一正規化是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者
資料庫設計之反三正規化的理解
反三正規化是基於第三正規化所調整的,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。具體做法是: 在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。降低正規化就是增加欄位,減少了查詢時的關聯,提高查詢效率,因為在資料
資料庫設計之三正規化的的理解
目的: 為了降低資料冗餘,消除資料插入異常、更新異常、刪除異常。在設計資料庫時正規化要求越嚴謹則設計出來的表則越多資料結構越靈活。 定義: 第一正規化(1NF):資料表中的每一列(每個欄位)必須是不可拆分的最小單元,也就是確保每一列的原子性; 第二正規化(2NF):滿足1NF後,
資料庫模型設計,第一正規化、第二正規化、第三正規化簡單例子理解
資料庫設計一般滿足第三正規化就夠了 第一正規化(無重複的列) 定義:資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性 通俗解釋:一個欄位只儲存一項資訊 eg:班級:高三年1班,應改為2個欄位,一個年級、一個班級,才滿足第一