首頁  >  文章  >  資料庫  >  MySQL資料庫範式化設計的方法

MySQL資料庫範式化設計的方法

王林
王林轉載
2023-05-29 19:55:131455瀏覽

一、設計範式

問題: 什麼是範式設計,為什麼需要反規範化設計 ?

範式來自英文Normal From 。開發過程中要設計一個好的資料庫邏輯關係,必須滿足一定的限制條件,此約束條件形成了開發範式,分成幾個等級,一級比一級嚴格。

滿足這些範式理論上可以讓我們的資料庫邏輯結構更加簡潔、清晰。

以下是常見的四個範式:

  • #第一個範式(1NF)

  • 第二範式(2NF)

  • 第三範式(3NF)

  • 第四個範式(BCNF)

1.第一範式(1NF)

  • 每一列都是不可再分的屬性值,確保每一列的原子性;

  • #兩列的屬性相近或相似或一樣,盡量合併屬性一樣的列,確保不產生冗餘資料;

  • 單一屬性的列為基本資料型別構成;

  • 設計出來的表格都是簡單的二維表。

範例:用戶收貨地址 反例:

名稱 電話 地址
#張三 #138000000 北京市-朝陽區-酒仙橋街道

正例:

##電話市北京市
#」
街道 #張三 138000000 ## -
朝陽區

酒仙橋街道

  • 總結:每列都是不可再分的原子值(一個列不可再分,例如通訊地址和省、市、區)

  • 2.第二範式(2NF)
  • 第二範式(2NF)是在第一範式的基礎上建立起來的。

第二範式(2NF)要求實體的屬性完全依賴與主鍵關聯。所謂完成依賴是指不能存在與存在依賴關鍵字的部分屬性,如果存在那麼這個屬性和關鍵字部分應該分離出來形成一個新的實體,新實體與原始實體是一對多的關係。

使用者姓名王麻子
反例: #產品ID 用戶ID #產品名稱
購買數量 下單一時間 100 #1 微波爐A102
1

#2022-08-08

訂單表#產品ID100
##正例:
#用戶ID 購買數量 ##下單時間
1

1#2022-08-08#產品表產品名稱
產品ID

100微波爐A102用戶表用戶名稱
#用戶ID

1

王麻子

  • #總結:消除列對主鍵的部分函數依賴(對於組合主鍵的部分依賴,例如:產品ID 使用者ID 為主鍵,存在使用者名稱,產品名稱等部分主鍵依賴欄位)
  • #3.第三範式(3NF)

反例:#訂單ID用戶ID #產品ID產品名稱產品廠商
##滿足第三範式(3NF)必須滿足第二範式(2NF)。 第三範式(3NF) 要求一個資料表中不包含已在其他表中包含的非主鍵關鍵字訊息,即資料不能存在傳遞關係,即每個屬性都跟主鍵有關係直接關係而非間接關係。

#1

1100微波爐A102美的22200變頻空調B101海爾 正例:訂單表

##使用者ID產品ID1#110022#200#商品資訊表
#########產品ID######產品名稱######產品廠商#############100######微波爐A102######美麗的#### ########200######變頻空調B101######海爾############

總結:消除欄位對非主鍵的傳遞依賴(就是需要取消訂單中例如商品名稱、商品地址等冗餘資訊)。

二、範式化設計

在真正的資料庫規格定義上,非常的嚴謹,例如第二範式(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中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除