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

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

a  所有欄位值都是不可分解的原子值

也就是說在一個數據庫表中,一個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中

c   資料表中的每一列資料都和主鍵直接相關,而不能間接相關

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

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

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

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

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

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

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

 訂單資訊表

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

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

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

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

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

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

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

相關推薦

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

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

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

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

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

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

資料庫設計原則

資料庫三正規化: * 第一正規化(1NF): 資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。(保持資料的原子性) 第二正規化(2NF): 滿足1NF後,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與

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

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

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

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

資料庫設計三大正規化

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

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

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

Oracle資料庫設計時的注意事項

表是Oracle資料庫中最基本的物件之一。萬丈高樓從平地起,這個基礎物件對於資料庫來說,非常重要。因為其設計是否合理,直接跟資料庫的效能相關。從Oracle資料庫菜鳥到資料庫專家這個過程中,在表設計與管理上,或多或少,會犯一些錯誤。筆者今天就談談自己在這方面的經驗與教訓,或許能夠給大家一些警

資料庫設計的大忌.

很多的程式設計師,總是會犯這種錯誤..導致後來系統越來越爛.. 越來越爛,基本上都是這幾個原則沒有把握住. 第一個大忌,懶, 不想新增欄位, 使用已有欄位存放新的資料. 舉個例子, 客戶姓名, 客戶代號,客戶ID, 可能有的系統設計的時候,只有客戶姓名和客戶ID, 沒有客戶代號.

常見電商專案的資料庫設計(MySQL版)

簡介: 目的: 電商常用功能模組的資料庫設計 常見問題的資料庫解決方案 環境: MySQL5.7 圖形客戶端,SQLyog Linux 模組: 使用者:註冊、登陸 商品:瀏覽、管理 訂單:生成、管理 倉配:庫存、管

Cassandra 設計的通用原則

    目前spark、storm都支援cassandra儲存,cassandra重返nosql舞臺,本文分享一些Cassandra 表設計的通用原則,我們團隊的實戰經驗,希望對大家有用。      每個資料庫中有成百上千的表,將其抽象分類起

商城 商品模組 資料庫 設計

要實現一個商城,對於商品模組中的資料庫表設計不懂,主要是:相同類別的產品的產品引數相同,不同類別的不同,這裡就不懂要怎麼設計了,所以上網找幾篇部落格瞭解   什麼是SPUSKUARPU PHP商城 商品模組 資料庫 表設計

資料庫設計的幾條準則

前言:資料庫設計在平時的工作是必不可少的,良好的表設計可以讓我們查詢效率更高,加快網站訪問速度,提升使用者體驗,並且方便於我們查詢資料。本篇部落格就來聚焦一下,如何設計出高可複用,優良的表結構,從而在實際的工作中使我們寫出更好的程式碼。 資料庫表設計的幾條黃金準則: 一:欄位的原子性 解

無限級分銷系統資料庫設計

   這次分享的內容很簡單,就是一張表的設計思路。 一、背景 在做交易所的時候有個需求,需要統計邀請註冊人數,比如 A邀請B, B邀請C, C邀請D。那麼A的邀請人數就是3個,B的邀請人數就是2個,C的邀請人數就是1個。除此之外,還要能統計出A直接邀請人數,A下一級邀請人數,A下二級

訂單審批流程 資料庫設計

1、應用場景 訂單生成時,加入訂單稽核流,不同的審批級別全部通過稽核之後,才能對訂單進行後續的操作 2、審批型別表 欄位名稱 欄位型別 欄位長度 主鍵 非空 註釋 APPROVALCODE VARCHAR2 2 Y NOT NULL 審批型別編碼

百度筆試題--論壇資料庫設計

轉載地址:http://blog.sina.com.cn/s/blog_542a862901000cbq.html 二、 一個簡單的論壇系統,以資料庫儲存如下資料:   使用者名稱,email,主頁,電話,聯絡地址,發帖標題,發帖內容,回覆標題,回覆內容。   每天論壇訪問量300萬

Oracle 資料庫設計-資料庫設計

在資料庫設計中,我的工作中經常會分析怎樣商業邏輯中的表格如何設計。再設計表的關係之前 需要先了解關係型資料庫特點 1、關係型資料庫,是指採用了關係模型來組織資料的資料庫; 2、關係型資料庫的最大特點就是事務的一致性; 3、簡單來說,關係模型指的就是二維表格模型,

MySQL資料庫設計規範

用盡量少的儲存空間來儲存一個欄位的資料;例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(255);預設情況下,InnoDB引擎單一欄位索引的長度最大為767位元組,當使用UTF-8字符集,每一個字元使用3位元組儲存,在text或者varchar型別的欄

springmvc 專案完整示例01 需求與資料庫設計 簡單的springmvc應用例項 web專案

一個簡單的使用者登入系統 使用者有賬號密碼,登入ip,登入時間 開啟登入頁面,輸入使用者名稱密碼 登入日誌,可以記錄登陸的時間,登陸的ip 成功登陸了的話,就更新使用者的最後登入時間和ip,同時記錄一條登入記錄 大致就是這樣子 ----------------------- 建立資料庫 n