2012-07-26 110 views
4

我想對產品變型(而不是選項或屬性,簡單變型)建模。產品變型的設計數據庫

所以每一個變種都是一種產品本身。對產品的所有變體有效的一般信息存儲在另一個表格(例如:文字說明)中。好吧,我認爲這很好,不需要進一步的改變。

對於從屬選項(例如顏色:紅色,大小:小),我創建了兩個變體。

變型1:

diagram 1

表的簡短說明:

  • 選項:存儲所有可用的選項(顏色,大小,材料,...)
  • 價值:存儲所有可用的值(紅色,藍色,綠色,小,中,大,鐵,木)
  • option_value:存儲所有可能的選項和值的組合(顏色:{紅色,藍色,綠色},大小:{小,中,大},...
  • product_option_value現在將產品連接到其選項(例如:顏色:red,size:small,product_id:1;顏色:藍色,尺寸:小,product_id:1)

好吧,我認爲這將工作得很好 - 左側的元數據描述(哪些選項,哪些值,哪些組合)用戶界面 - 右側的產品鏈接。

但是有一個問題...可能的選項和值的組合被描述爲構建GUI及其可能以編程方式進行驗證,但數據庫無法驗證。

所以我創建變種2:

diagram 2

現在我不知道,如果第二個解決方案可能是更好的一個。你怎麼看?有改進的餘地嗎?

+0

這取決於你想要達到與關於數據的完整性和級聯更新什麼/級聯刪除。順便說一句,你的結構看起來像一個輕的EAV模型。 – 2012-07-26 14:01:32

+0

我打算根據初始點將此評論擴展爲答案:分析兩個變體的每個級聯流程。 – 2012-07-26 14:04:49

+0

是的,你是對的 - 這是EAV,我對它並不滿意,但該系統將成爲許多供應商的市場。因此這些選項必須是動態的。 關於級聯更新/刪除:我看不出兩個變體之間有什麼大的差異。關於數據完整性,變體2可能會更好。 – 2012-07-26 14:45:26

回答

0

如果你想限制product_option_value只有已經存在的值在option_value,那麼是的,第二個模型是更好的。然而,該模型允許在多個選項之間共享單個值(例如「紅色」可以是「顏色」和「大小」)。我猜這是不是你想要的,在這種情況下,模型應該類似於此:

enter image description here

+0

你就在那裏,但這取決於域名 – 2012-07-26 19:33:42

+1

有些產品可以由許多部分組成,並且每個部分可以着色不同。所以當我們有三個部分時,我們有三個顏色選項,每個選項都提供相同的值(顏色)。 – 2012-07-26 19:53:22