2013-06-05 77 views
3

我目前正在研究一個項目,其中數據庫將包含具有變化的產品,我想知道在數據庫中對此進行建模的最佳方法。建模多種變化的產品

「帶有變化的產品」我的意思是像T恤衫這樣的東西,其中一件襯衫會有各種尺寸和顏色,但實質上仍然是同一件物品。

這些將被分組到產品的「家庭」,這讓我覺得它會很簡單,因爲我可以爲家庭創建一張桌子,並有一個鏈接的家庭產品表來識別每個家庭的產品 - 使用假設每一個變化都是一個單獨的產品本身。

問題在於這些可變產品的某些屬性將會是一個設定的數量/值 - 例如,顏色將會是一組特定的顏色,但尺寸可以是任何東西,因爲T恤衫(類比之後)是定製所以基於測量的胸部尺寸。

由於項目的性質,無論何時創建產品,即使是「家庭」的一部分並且邊緣不同,該產品都需要所有信息。

TL; DR:

  • 產品變化可以被任一組(即,數量有限的)或在遞加(即,基本上無限數量)
  • 由於此我的需要存儲產品「家族」以這樣的方式:
    • 產品可以被定義爲「設置」或對改變
    • 新產品在家庭中,即使滑動標尺屬性「滑尺」,可以顯示所有信息
    • 有道理!

我不一定要找一個數據庫模型將提供給我的,只是在正確的方向上的指針將是一個巨大的幫助,我幾乎失去了做到這一點的最好辦法有效。

+0

「產品系列」是否共享單個SKU,或每個版本是否都有自己的? – landons

+0

每種變化都有其自己的。 –

+0

你需要怎樣處理這些數據?只是存儲和檢索,或查詢?例如。 「獲取物品xyz123的產品信息」,或者「查找所有尺寸爲23.4的藍色T恤」 –

回答

5

假設功能集是不是在你的產品是相同的(這似乎是顯而易見的,從你的問題),這種結構是有道理的:

  • 的產品表;包含產品ID/SKU,產品名稱,產品系列ID。一行/產品。
  • 產品系列表;包含產品系列ID,產品系列名稱以及特定於產品系列的任何詳細信息。一排/產品系列。
  • 產品特性表;包含產品ID,功能ID,可能的功能類型,值,可能的單位值。多行/產品,一行/功能。
  • 通過功能ID鏈接到產品功能的功能查找表;包含功能ID,功能描述,功能類型以及可能的值單位(根據您使用表格的方式,後兩者在產品功能表中可能會更好)。

這使您可以立即訪問這些功能/等。你想要的,而不必擔心'滑動規模'或什麼。您還可以爲功能表中的值設置非定量值的查找表(我認爲您不會將其存儲在功能表中,因爲該表應該爲1行/功能)。如果您的功能非常接近每個產品的獨特功能,那麼您可以跳過1行/功能查找表,只是具有多行功能值表,但聽起來並不是這種情況。

4

這是一個相當普遍的問題 - 它通常被稱爲「如何將對象繼承映射到關係結構中」。有很多選擇。

Joe所描述的一般稱爲「實體/屬性/值」或EAV。它非常靈活 - 你可以處理各種各樣的數據屬性,而無需重新設計你的數據庫 - 但它很快就會因爲複雜的查詢而失去活力 - 想象一下,要求所有顏色爲紅色,尺寸爲(M ,S,L)和脖子大小大於44.

Craig Larman的書「應用UML和模式」中描述了以下替代方法 - 獲取更多細節的副本。或參見here。首先,您可以在一個表中爲每個子類之間的公共數據建模,併爲每個子類都有一個單獨的表。在你的例子中,你需要一個帶有SKU等的「產品」表格,以及一個帶有colourID,chestMeasurement等的「T恤」表格。這意味着大量的連接來檢索多種不同的產品類型,但是會給你一個相當「乾淨」的數據模型。

拉爾曼描述的下一個模型是「超級表」 - 您有一張表,它只是包含所有可能的列。醜陋而笨拙,但如果你只有幾個子類型,可能是最簡單和最快的。

最後,「每個子類型一個表」選項 - 您只需將每個類型映射到其自己的表 - 例如, 「T恤」,「褲子」,「帽子」等。非常乾淨和可預測的,但很難跨產品類型查詢。

除了明顯的RDBMS解決方案之外,您還可以查看面向文檔的解決方案,例如,通過使用您的數據庫引擎對XML的支持。