程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 數據庫設計三大范式概述

數據庫設計三大范式概述

編輯:關於SqlServer
 

為了建立冗余較小、結構合理的數據庫,設計數據庫時必須遵循一定的規則。在關系型數據庫中這種規則就稱為范式。范式是符合某一種設計要求的總結。要想設計一個結構合理的關系型數據庫,必須滿足一定的范式。

在實際開發中最為常見的設計范式有三個:

1.第一范式

第一范式是最基本的范式。如果數據庫表中的所有字段值都是不可分解的原子值,就說明該數據庫表滿足了第一范式。

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

用戶信息表

編號 姓名 性別 年齡 聯系電話 省份 城市 詳細地址 1 張紅欣 男 26 0378-23459876 河南 開封 朝陽區新華路23號 2 李四平 女 32 0751-65432584 廣州 廣東 白雲區天明路148號 3 劉志國 男 21 0371-87659852 河南 鄭州 二七區大學路198號 4 郭小明 女 27 0371-62556789 河南 鄭州 新鄭市薛店北街218號

上表所示的用戶信息遵循了第一范式的要求,這樣在對用戶使用城市進行分類的時候就非常方便,也提高了數據庫的性能。

 

2.第二范式

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

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

 

訂單信息表

訂單編號 商品編號 商品名稱 數量 單位 商品價格 001 1 挖掘機 1 台 1200000¥ 002 2 沖擊鑽 8 個 230¥ 003 3 鏟車 2 輛 980000¥

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

而如果把這個訂單信息表進行拆分,把商品信息分離到另一個表中,就非常完美了。如下面這兩個所示。

 

訂單信息表

訂單編號 商品編號 數量 001 1 1 002 2 8 003 3 2

商品信息表

商品編號 商品名稱 單位 商品價格 1 挖掘機 台 1200000¥ 2 沖擊鑽 個 230¥ 3 鏟車 輛 980000¥

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved