2010-01-12 70 views
4

假設我有一個包含四種不同產品類型的數據庫。 每種類型都包含彼此差異很大的字段。 第一類產品分爲三類。 第二類產品分爲三類。 但第三和第四個,沒有分類在任何東西。多種產品類型的數據庫設計

構建此數據庫結構的最佳方法是什麼? 我應該只製作四張不同的表格嗎? 另外,如何使用這些不同的產品來構建產品交易細節?

回答

0

首先它取決於你的類型是否相互依賴,以及是否存儲類型相關的信息。
但是您應該確保使用單個產品表。

0

有幾種方法可以做到這一點...最簡單的方法是隻爲每個分類設置一個字段,並允許它們爲NULL。這可以解釋第三種和第四種類型的項目,但可能會導致在這些列中有NULL的行(沒有什麼不對)。

更難的方法是使用類似繼承的結構。在這裏,你有一個存儲所有公共屬性的基表。然後,對於鏈接到基表的每種類型的對象以及爲這些類型的對象存儲屬性,都有「子表」。要獲得完整的屬性列表,您可以在視圖中將父表和子表連接在一起。如果你知道你在尋找什麼樣的對象,你可以鏈接適當的子表。如果您想一起查看產品,那麼您將LEFT JOIN將所有子表連在一起,但這仍然會導致視圖中帶有NULL的行,您需要將其解釋爲此類型或該類型。

LLBLGen原生處理這兩種方法。

0

還有就是要做到這一點的方法不止一種,但最直接的將是:

與共同屬性創建一個產品表:

Product 
------------- 
PRODUCT_ID NUMBER (PK - This is what you'll foreign key against in other tables) 
PRODUCT_NAME VARCHAR(n) 
PRODUCT_DESC VARCHAR(n) 
PRODUCT_TYPE NUMBER (FK into PRODUCT_TYPES) 

Product_Types 
------------- 
PRODUCT_TYPE NUMBER  (PK) 
DESCRIPTION VARCHAR(n) 

創建沿東西線這適用於每種產品類型匹配 自定義字段到該類型的產品所需的列。

Car_Products 
------------- 
PRODUCT_ID  NUMBER (PK, FK - to Product) 
NUM_DOORS  NUMBER 
NUM_CYLINDERS NUMBER 
MPG   NUMBER 
... CUSTOM FIELDS ... 

然後,您可以創建視圖爲不同的產品類型,以獲得所有需要的信息

Cars 
------------- 
CREATE VIEW Cars AS (SELECT * FROM Car_Products cp JOIN Products p ON (cp.product_id = p.product_id)); 
13

你也可能想看看有點更復雜的模型。此模型可以使用任意數量的不同產品並將它們分配給屬性。每個產品可以具有任何數量的不同屬性

PropertyType表中包含各種屬性類型,如[名稱] =高度,寬度,顏色,MaxSpeed,體積等特質是一種描述性的顏色; 測量是一個數字屬性,像高度。

每個產品可以屬於很多類別;類別可以嵌套。

product_nodel_01

+0

非常好的模型,感謝分享。 – 2013-01-27 09:58:13

+0

這麼好的答案... – Mohammadreza 2013-03-22 09:58:01

+0

如果我有一個屬性與主數據,我將如何擴展這種模式?比方說,我有一個名爲「模板」的屬性類型。其實它只是一個blob商店(我已經有表格度量,特質和文件)。不幸的是,不應該能夠放入任何文件,而是從文件列表中進行選擇。我必須添加表格模板嗎?整體測量,特質,文件和模板。 – OddDev 2017-03-05 10:37:13

相關問題