Mysql

此表中的這種數據/欄位是否需要在 MYSQL 中進行規範化?

  • March 9, 2022

我在 MYSQL 中有這個uom表:

MYSQL中的這個產品表:

這個產品表需要標準化嗎?有人說這個表沒有多值欄位/數據……對嗎?簡而言之,產品表具有產品的名稱、標題和單位列。Uom 列有儲存單位、數量包裝和基於單位的價格。這意味著每種產品都有不同的單位和基於單位的價格。

例如,test4 產品有三個單元 1:1:10.00, 2:12:20.00, 3:1:30.00。我們以第一個單元為例:1:1:10.00.

  • 第一個數字是單位表中單位的 ID
  • 第二個數字是數量包裝
  • 第三個數字是價格

所以,1:1:10.00是一個單位。2:12:20.00並且3:1:30.00是不同的單位。所以,test4一共有3個單元。

我會投贊成票以使其正常化。計量單位,即一UOM列,實際上應該是計量單位,例如“米”、“碼”、“磅”、“噸”等。我在您目前儲存的值中根本看不到這一點它,例如1:1:10.00. 您甚至自己說,這些是不同的數據點“第三個數字是價格”。那麼您可能應該有一個Price列。如果您只想將 的 儲存IDUOMUOM中,那很好,但我建議適當地規範化其他數據點。

通過將多個數據點填充到一列中,會損害該列的可讀性、可維護性和查詢能力。如果您需要針對該列執行函式以從中解析某些數據點,它甚至可能會影響性能,特別是如果這些數據點用於查詢中任何位置的謂詞(JOIN, WHERE,HAVING子句)。

這個表需要標準化嗎?

簡短的回答:的。

稍微不那麼簡短的回答:規範化不是數據庫表“需要”的東西,但在某些情況下(例如這種情況),強烈建議進行規範化,因為它會帶來很多好處。

有人說這個表沒有多值欄位/數據……對嗎?

這是不正確的。這個表不僅有一個多值列,這個多值列的值本身就是實體,有自己的一組值。除非您使用的列類型具有復雜的結構作為值(例如 JSON 列),否則這種列會使操作和處理其數據變得過於復雜。


現在,缺點是:更改資料結構將是一個重大更改,因此如果在許多不同的地方按原樣讀取此數據,那麼這將需要跨許多模組進行大量更改,那麼好處可能會付出相對較高的成本。您需要利用標準化是否值得,即如果更改不是那麼複雜,或者如果/當它變得太大時,保持資料結構現在的樣子最終會使資訊變得不可讀和不可維護。

引用自:https://dba.stackexchange.com/questions/308432