問題: 什麼是範式設計,為什麼需要反規範化設計 ?
範式來自英文Normal From
。開發過程中要設計一個好的資料庫邏輯關係,必須滿足一定的限制條件,此約束條件形成了開發範式,分成幾個等級,一級比一級嚴格。
滿足這些範式理論上可以讓我們的資料庫邏輯結構更加簡潔、清晰。
以下是常見的四個範式:
#第一個範式(1NF)
第二範式(2NF)
第三範式(3NF)
第四個範式(BCNF)
每一列都是不可再分的屬性值,確保每一列的原子性;
#兩列的屬性相近或相似或一樣,盡量合併屬性一樣的列,確保不產生冗餘資料;
單一屬性的列為基本資料型別構成;
設計出來的表格都是簡單的二維表。
範例:用戶收貨地址 反例:
名稱 | 電話 | 地址 |
---|---|---|
#張三 | #138000000 | 北京市-朝陽區-酒仙橋街道 |
正例:
#」 | ##電話省 | ||||
---|---|---|---|---|---|
區 | 街道 | #張三 | 138000000 | ## - |
酒仙橋街道
第二範式(2NF)要求實體的屬性完全依賴與主鍵關聯。所謂完成依賴是指不能存在與存在依賴關鍵字的部分屬性,如果存在那麼這個屬性和關鍵字部分應該分離出來形成一個新的實體,新實體與原始實體是一對多的關係。
反例: | #產品ID | 用戶ID | #產品名稱 | ||
---|---|---|---|---|---|
購買數量 | 下單一時間 | 100 | #1 | 微波爐A102 |
#2022-08-08
##正例: | 訂單表|||
---|---|---|---|
#用戶ID | 購買數量 | ##下單時間 |
#產品表 | |
---|---|
產品ID |
用戶表 | |
---|---|
#用戶ID |
1
王麻子#3.第三範式(3NF)
##滿足第三範式(3NF)必須滿足第二範式(2NF)。 | 第三範式(3NF) 要求一個資料表中不包含已在其他表中包含的非主鍵關鍵字訊息,即資料不能存在傳遞關係,即每個屬性都跟主鍵有關係直接關係而非間接關係。 | 反例: | ||
#訂單ID | 用戶ID | #產品ID | 產品名稱 |
#1
微波爐A102 | 美的 | |
---|---|---|
2 | 200 | 變頻空調B101 |
正例: |
產品ID | 1 | |
---|---|---|
100 | 2 | |
#200 |
總結:消除欄位對非主鍵的傳遞依賴(就是需要取消訂單中例如商品名稱、商品地址等冗餘資訊)。
在真正的資料庫規格定義上,非常的嚴謹,例如第二範式(2NF)的定義「若某關係R 術語第一範式,且每個非主屬性完全函數依賴候選碼,則關係R 屬於第二範式」。
最佳設計並不是嚴格遵循規範化理論的設計,而是能夠根據具體的業務場景不斷實踐和總結得出的最適合的設計方案。
所謂反規範化設計,就是針對規範化而言的。 1、為了效能和讀取效率而適當的違反對資料庫範式設計的要求; 3、為了查詢的效能,允許存在部分(少量)冗餘資料。換句話說,反規範化設計就是直接用空間換時間。
商品資訊
#ID | 商品名稱 | 商品價格 | 商品描述 | 商品圖片位址 |
---|---|---|---|---|
1 | 微波爐A101 | $100.99 | 可以加熱食物的微波爐 | tupian.baidu.com |
分類訊息
分類ID | #分類名稱 |
---|---|
1 | 電器 |
商品分類對應關係表
商品ID | 分類ID |
---|---|
1 | 1 |
商品資訊反標準化設計
#商品名稱 | 分類名稱 | 商品價格 | 商品描述 | 商品圖片位址 | |
---|---|---|---|---|---|
1 | #1 | 電器 | $100.99 | 可以加熱食物的微波爐 | tupian.baidu.com |
以上是MySQL資料庫範式化設計的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!