1. 程式人生 > >資料庫設計三大正規化

資料庫設計三大正規化

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。

在實際開發中最為常見的設計正規化有三個:

1.第一正規化(確保每列保持原子性)

第一正規化是最基本的正規化。如果資料庫表中的所有欄位值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。

第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到“地址”這個屬性,本來直接將“地址”屬性設計成一個數據庫表的欄位就行。但是如果系統經常會訪問“地址”屬性中的“城市”部分,那麼就非要將“地址”這個屬性重新拆分為省份、城市、詳細地址等多個部分進行儲存,這樣在對地址中某一部分操作的時候將非常方便。這樣設計才算滿足了資料庫的第一正規化,如下表所示。

上表所示的使用者資訊遵循了第一正規化的要求,這樣在對使用者使用城市進行分類的時候就非常方便,也提高了資料庫的效能。

2.第二正規化(確保表中的每列都和主鍵相關)

第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。

比如要設計一個訂單資訊表,因為訂單中可能會有多種商品,所以要將訂單編號和商品編號作為資料庫表的聯合主鍵,如下表所示。

訂單資訊表

這樣就產生一個問題:這個表中是以訂單編號和商品編號作為聯合主鍵。這樣在該表中商品名稱、單位、商品價格等資訊不與該表的主鍵相關,而僅僅是與商品編號相關。所以在這裡違反了第二正規化的設計原則。

而如果把這個訂單資訊表進行拆分,把商品資訊分離到另一個表中,把訂單專案表也分離到另一個表中,就非常完美了。如下所示。

這樣設計,在很大程度上減小了資料庫的冗餘。如果要獲取訂單的商品資訊,使用商品編號到商品資訊表中查詢即可。

3.第三正規化(確保每列都和主鍵列直接相關,而不是間接相關)

第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關。

比如在設計一個訂單資料表的時候,可以將客戶編號作為一個外來鍵和訂單表建立相應的關係。而不可以在訂單表中新增關於客戶其它資訊(比如姓名、所屬公司等)的欄位。如下面這兩個表所示的設計就是一個滿足第三正規化的資料庫表。

這樣在查詢訂單資訊的時候,就可以使用客戶編號來引用客戶資訊表中的記錄,也不必在訂單資訊表中多次輸入客戶資訊的內容,減小了資料冗餘。

相關推薦

資料庫設計三大正規化和五大約束

【三大正規化】 第一正規化(1NF):   資料表中的每一列(欄位),必須是不可拆分的最小單元,也就是確保每一列的原子性。   例如: userInfo: '山東省煙臺市 1318162008' 依照第一正規化必須拆分成        &

轉:資料庫設計三大正規化

http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須

資料庫設計三大正規化簡析

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。       在實際開發中最為常見的設計正規化有三

資料庫設計三大正規化

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。 在實際開發中最為常見的設計正規化有三個: 1.第一正規化(確保每

關係型資料庫設計三大正規化

1.何為資料庫正規化? 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同 規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。 目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第

資料庫系統學習筆記--關係設計三大正規化

第一正規化(1NF) 定義:資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性。 說明:E-R模型允許實體集和聯絡集具有某些程度的子結構,比如多值屬性(一個教師有多個電話號碼)、組合屬性(包含多個子屬性,

資料庫設計三大正規化原則

a  所有欄位值都是不可分解的原子值 b  也就是說在一個數據庫表中,一個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中 c   資料表中的每一列資料都和主鍵直接相關,而不能間接相關 1.第一正規化(確保每列保持原子性) 第一正規化是最基本的正規化。如果資料

JDBC章節總結(.資料庫設計正規化、如何設計資料庫表)

1.介面可以降低程式的耦合度,提高程式的擴充套件力* 答:如果需要擴充套件介面功能的時候,直接建立一個實現介面功能的物件就可以了。 2.JDBC是一套專門用來操作資料庫的介面* 見名知意,java databases connection java 虛擬機器與資料庫之間的連線,需

資料庫三大正規化以及五大約束

數  據   庫     資料庫的三大特性可謂是:實體屬性和關係。      實體:表; 屬性:表中的資料(欄位); 關係:表與表之間的關係;      資料庫設計三大正規化(重點): 第一正規化(1NF):資料表中的每一列(每個欄位)必須是不可拆分的最小單元,也就是

資料庫設計正規化

第一正規化(1NF):強調的是列的原子性,即列不能夠再分成其他幾列。 問:怎麼知道列還能不能分? 答:靠生活常識與經驗 舉例1 id 地址 1 中國廣東 2

資料庫三大正規化(較好理解版)

第一正規化(1NF):資料表中的每一列(每個欄位)必須是不可拆分的最小單元,也就是確保每一列的原子性 第二正規化(2NF):滿足1NF後,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係,也就是說一個表只描述一件事情; 例如:訂單表只描述訂單相關

資料庫設計正規化

1.正規化 1.1 1NF-3NF 定義 1NF確保原子性(Atomicity)原子性的粒度、原子性的價值(1正規化:單值,並且把值當做單值用,建議不要把值拆開) 2NF檢查對鍵的完全依賴價值在在於控制資料冗餘和查詢效能 3NF檢查屬性的獨立性 規範化的價值合理規範化的模型可應對需求變更 規範

DB設計三大正規化

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘

深入淺出資料庫設計正規化

        設計良好結構的資料庫,可以有效減小資料冗餘,減少增刪改中出現的問題。深入理解資料庫設計的三正規化,對於設計“健壯的資料庫“十分有必要。資料庫三正規化是設計資料庫 時參考的準則,接下來我們一一進行介紹: 一、資料庫第一正規化:        資料庫表的每一列

資料庫三大正規化

第一正規化:資料表的每一列(每個欄位)必須是不可拆分的最小單元,也就是確定每一列的原子性; 第二正規化:滿足第一正規化後,要求表中的所有列都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係,也就是說一個表只描述一件事情 第三正規化:必須先滿足第二正規化,要求:表中的每一列只

資料庫設計 第一正規化 二 三 INF 2NF 3NF 區別 詳解 傳遞依賴

關於資料庫的設計準則,平時我也就知道怎麼去做。當有人問起我第三正規化的時候,我還真不知道怎麼去表述了。找到這篇解說,覺得概念和例子都講得不錯,收藏起來,以備後用。 I、關係資料庫設計正規化介紹 1.1 第一正規化(1NF)無重複的列         所謂第一正規化(1NF

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

前言        資料庫課本上都把正規化寫到五正規化了,但是實際應用中,滿足三正規化已經足夠了,五正規化太多餘了。 三種正規化是條件遞增的聯絡(即後一個正規化是在前一個條件滿足的情況下引入新的條件)。 例如  正規化 滿足條件

Python設計三大正規化

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個:1.第一正規化(確保每列保持原子性)第

資料庫設計正規化與反正規化

我們在設計資料庫的過程中,往往要用到正規化或反正規化的設計模式。熟悉地掌握正規化與反正規化的要領,學會在實際開發中恰當地混合使用正規化與反正規化,才能設計出結構合理,執行高效的資料庫。 下面就以一個經典的例子進行講述正規化與反正規化: 職工-部門表: 部門-部門

Mysql 資料庫三大正規化

一、資料庫設計正規化 1. 什麼是正規化 簡言之就是,資料庫設計對資料的儲存效能,還有開發人員對資料的操作都有莫大的關係。所以建立