數據庫設計規范之三大范式
1、什么是數據庫范式
設計出符合業務需求、高性能的程序對數據庫的一種設計規范,稱為數據庫范式,遵循數據庫范式能設計出邏輯清晰,且可擴展性高的程序系統
2、三大范式定義
- 1NF:符合1NF的關系中每個屬性不可再細分了,有相似的或相近的字段可以合並成一個字段
- 2NF:一行數據應該只與一列相關,不應該存在冗余
- 3NF:非主屬性間不應該存在傳遞關系
3、三大范式詳解
1NF:屬性不可再細分為更小粒度的字段,有相似或者相近含義的字段可以合並為一個字段。
假設有這樣一個業務場景,我需要一批用戶的基礎信息(包括姓名,年齡,電話,詳細地址等,並按地址分類用戶)
表A:

表B:

對比A、B兩張表,很明顯A表不足以滿足業務需求,正確的表結構應該是表B。
2NF:一行數據應該只與一列相關,不應該存在冗余的數據。
假設有這樣的業務場景,記錄客戶下單的酒店信息。

這里用一張表就來存儲,可以見到每一行的數據都是對於“張”這個用戶來言的,這個name列值就非常冗余,我們可以根據2NF重新設計三張表來維護數據關系。(一張表用來存放用戶信息,一張表用來存放酒店房間信息,第三張表用來關聯用戶與酒店房間信息)
3NF:非主屬性間不應該存在傳遞關系
假如我設計了如下這張表

這是張學生信息表,school代表學校名稱,school_tel代表學校電話,但是從場景中分析可知,school_tel與school之間存在着傳遞關系,而且school_tel與id沒有依賴關系,所以表結構設計不合理,正確的做法應該是設計3張表,另外一張存放學校信息,還有一張表用來關聯學生與學校的關系。
三大范式只是對設計數據庫的建議,並不一定要完全遵循,主要還是要依賴於業務需求,良好的數據庫結構不僅可以降低開發人員的工作量和難度也可以增加程序的彈性,為后面的維護打下基礎
