設計出符合業務需求、高性能的程序對數據庫的一種設計規範,稱爲數據庫範式,遵循數據庫範式能設計出邏輯清晰,且可擴展性高的程序系統數據庫
1NF:屬性不可再細分爲更小粒度的字段,有類似或者相近含義的字段能夠合併爲一個字段。數據庫設計
假設有這樣一個業務場景,我須要一批用戶的基礎信息(包括姓名,年齡,電話,詳細地址等,並按地址分類用戶)性能
表A:設計
表B:3d
對比A、B兩張表,很明顯A表不足以知足業務需求,正確的表結構應該是表B。blog
2NF:一行數據應該只與一列相關,不該該存在冗餘的數據。開發
假設有這樣的業務場景,記錄客戶下單的酒店信息。基礎
這裏用一張表就來存儲,能夠見到每一行的數據都是對於「張」這個用戶來言的,這個name列值就很是冗餘,咱們能夠根據2NF從新設計三張表來維護數據關係。(一張表用來存放用戶信息,一張表用來存放酒店房間信息,第三張表用來關聯用戶與酒店房間信息)擴展
3NF:非主屬性間不該該存在傳遞關係程序
假如我設計了以下這張表
這是張學生信息表,school表明學校名稱,school_tel表明學校電話,可是從場景中分析可知,school_tel與school之間存在着傳遞關係,並且school_tel與id沒有依賴關係,因此表結構設計不合理,正確的作法應該是設計3張表,另一張存放學校信息,還有一張表用來關聯學生與學校的關係。
三大範式只是對設計數據庫的建議,並不必定要徹底遵循,主要仍是要依賴於業務需求,良好的數據庫結構不只能夠下降開發人員的工做量和難度也能夠增長程序的彈性,爲後面的維護打下基礎