iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
2
自我挑戰組

SQL Server 資料庫程式設計/管理/經驗筆記系列 第 2

正規化設計之自我拿捏要領:以成本觀點

  • 分享至 

  • xImage
  •  

在資料表設計最經常性聽到的名詞就是正規化
常見的正規化名稱為

  • 「第一正規化」
  • 「第二正規化」
  • 「第三正規化」

正規化的執行步驟網路上的資訊很多就不在此描述

若無法記住各正規化的詳細描述與步驟
小弟在設計資料表時主要拿捏要領

  • 減少儲存成本
  • 增加效能:減少 I/O 成本 byte vs CHAR(10) 差了十倍

使用範例來解釋

非正規化(可優化)資料表

以訂單主資料表部分欄位為例

Order.OrderHeader
---------------------------
Id		OrderNo		Status
---------------------------
1		ORDER001	Processing
2		ORDER002	Finished
3		ORDER003	Cancelled
4		ORDER004	Finished
5		ORDER005	Processing

上每一筆資料列的最大儲存成本為

Orders.OrderHeader

INT + CHAR(8) + VARCHAR(10) = 4+8+12 = 24 (Byte)

正規化(優化)之後

Order.OrderStatus
--------------------------------
Id		Name
--------------------------------
1		Processing
2		Finished
3		Cancelled

Order.OrderHeader
--------------------------------
Id		OrderNo		StatusId
--------------------------------
1		ORDER001	1
2		ORDER002	2
3		ORDER003	3
4		ORDER004	2
5		ORDER005	1

每一筆資料列的最大儲存成本為

Order.OrderStatus

TINYINT + VARCHAR(10) = 1+12 = 13 (Byte)

Order.OrderHeader

INT + CHAR(8) + TINYINT = 4+8+1 = 13 (Byte)

可以發現 Order.OrderHeader 資料表的儲存成本降低了
當資料量越龐大的情況下
此設計所節省的儲存成本就會更明顯

透過正規化設計能夠有效的減少儲存成本
雖然儲存成本相較於記憶體或處理起來說是低廉

但是在存取成本上
從硬碟存取資料的成本
相較記憶體就高了許多

當然
必要時也得對資料表進行非正規化設計


上一篇
主題介紹與文章範圍
下一篇
SSMS 很好用但還是要多撰寫 Transact-SQL
系列文
SQL Server 資料庫程式設計/管理/經驗筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
PPTaiwan
iT邦好手 1 級 ‧ 2019-09-27 11:46:37

想請問您的 "1~3 正規化" 有用什麼規劃圖嗎??

我要留言

立即登入留言