2014-02-12 23 views
0

我正在添加捆綁功能以檢出用戶可以以折扣價格選擇自己的定製捆綁產品。因此,捆綁產品的數量是動態的。數據庫設計:如何記錄捆綁產品遞送

我有以下的現有DB模式:(ID(PK),金額,日期時間等)

產品(ID(PK),名稱,價格,等...)
交易
交貨(ID(PK),TRANSACTION_ID(FK transaction.id),PRODUCT_ID(FK product.id),折扣,等等。)

假設情況

捆綁 - 產品(1,2)
捆綁B - 產品(3,4)

一個事務包含捆綁包A和B.產品(1,2,3,4)交付時具有相同的transaction_id。

既然如此,與目前DB模式沒有辦法知道以下幾點:
1.當時產品交付成捆
2.在產品捆綁

什麼其他產品的一部分

將BOOL'捆綁'列添加到交貨表中可確定交易中交付的產品是捆綁在哪個產品中,哪些不是,但如果某個交易包含多個捆綁,則無法知道哪些產品捆綁在一起。

可以創建事務特定的包ID。捆綁A(ID 1),捆綁B(ID 2),該捆綁對交易是唯一的,並針對每個交付的捆綁產品進行記錄。這似乎是一個奇怪的方式,但它做到了。這就提出了一個問題:

捆綁ID是否應該在所有交易中都是唯一的?如果是這樣,你只需簡單地創建一個捆綁表來創建一個唯一的捆綁ID?

您認爲解決此問題的最佳方法是什麼?

回答

0

從設計的角度來看,我會考慮產品層次結構。

dbo.ProductHierarchy 
ProductHierarchyID INT (PK), ParentProductID INT (FK), ChildProductID INT (FK) 

這樣你就可以添加捆綁作爲一個產品(父),並將其鏈接到它的包容性產品1 & 2兒童。

您可以擴展此架構以包含捆綁價格,當捆綁產品添加到訂單/交易時,您可以使用該價格覆蓋產品1和2的價格點。您還可以包含促銷的開始/結束日期,以控制前端顯示的內容。

但是,如果多個父包中包含類似的子產品,請務必小心。

Ex。客戶訂單產品1,2,3。套裝A在產品1 + 2上。 Bundle C在產品1 + 3上。你是否讓這個客​​戶獲得了兩個捆綁包?還是隻有一個?

另一種選擇是offer表格,它會在您的產品表格上變成FKey,但最終會吹出產品,所有產品都具有相同的名稱,只是具有不同的相應產品ID。