假設我有一個包含四種不同產品類型的數據庫。 每種類型都包含彼此差異很大的字段。 第一類產品分爲三類。 第二類產品分爲三類。 但第三和第四個,沒有分類在任何東西。多種產品類型的數據庫設計
構建此數據庫結構的最佳方法是什麼? 我應該只製作四張不同的表格嗎? 另外,如何使用這些不同的產品來構建產品交易細節?
假設我有一個包含四種不同產品類型的數據庫。 每種類型都包含彼此差異很大的字段。 第一類產品分爲三類。 第二類產品分爲三類。 但第三和第四個,沒有分類在任何東西。多種產品類型的數據庫設計
構建此數據庫結構的最佳方法是什麼? 我應該只製作四張不同的表格嗎? 另外,如何使用這些不同的產品來構建產品交易細節?
首先它取決於你的類型是否相互依賴,以及是否存儲類型相關的信息。
但是您應該確保使用單個產品表。
有幾種方法可以做到這一點...最簡單的方法是隻爲每個分類設置一個字段,並允許它們爲NULL。這可以解釋第三種和第四種類型的項目,但可能會導致在這些列中有NULL的行(沒有什麼不對)。
更難的方法是使用類似繼承的結構。在這裏,你有一個存儲所有公共屬性的基表。然後,對於鏈接到基表的每種類型的對象以及爲這些類型的對象存儲屬性,都有「子表」。要獲得完整的屬性列表,您可以在視圖中將父表和子表連接在一起。如果你知道你在尋找什麼樣的對象,你可以鏈接適當的子表。如果您想一起查看產品,那麼您將LEFT JOIN將所有子表連在一起,但這仍然會導致視圖中帶有NULL的行,您需要將其解釋爲此類型或該類型。
LLBLGen原生處理這兩種方法。
還有就是要做到這一點的方法不止一種,但最直接的將是:
與共同屬性創建一個產品表:
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));
非常好的模型,感謝分享。 – 2013-01-27 09:58:13
這麼好的答案... – Mohammadreza 2013-03-22 09:58:01
如果我有一個屬性與主數據,我將如何擴展這種模式?比方說,我有一個名爲「模板」的屬性類型。其實它只是一個blob商店(我已經有表格度量,特質和文件)。不幸的是,不應該能夠放入任何文件,而是從文件列表中進行選擇。我必須添加表格模板嗎?整體測量,特質,文件和模板。 – OddDev 2017-03-05 10:37:13