2010-10-28 86 views
2

如果有人能幫我找到一個優雅的解決方案來解決這個數據庫設計問題,我將不勝感激。有一家公司有很多不同的產品(P1,P2,P3,P4)和很多客戶(C1,C2,C3,C4)。現在,他們有一個簡單的數據庫表來處理訂單,像 20101027 C2 P1貨狀態 20101028 C1 P2數量狀態db設計問題(如何處理產品組)

現在我想創造的產品組(如(P1 + P3 + P4)和(P2 + P3)),可以一起購買降價。在數據庫系統中表示這些組的最佳方式是什麼?將這些組作爲單獨的產品處理不起作用,因爲我需要從組中刪除,添加或刪除產品的功能。所以我需要保留當前給定的產品表。

感謝您的閱讀。我希望我能得到一些幫助。

+2

將「p1 + p2 + p3 + p4」計爲什麼?它是'(p1 + p3 + p4)+ p2'還是'p1 +(p2 + p3)+ p4'? – Quassnoi 2010-10-28 14:51:26

+0

葉,好問題。我一直想知道麥當勞的情況。 – 2010-10-28 15:02:05

+0

@StephaniePage以較低者爲準 – 2016-04-08 05:06:59

回答

4

添加一個新表product_group_promotions,帶有ID,名稱和折扣價格。然後創建一個將產品鏈接到產品組促銷活動的表格product_group_promotions_products。這將包含產品組ID和產品ID。這樣,您可以將一個產品放在多個組中,並讓組包含多個產品(當然)。

+0

無論如何,這將是對現有系統的複雜擴展。 – 2010-10-28 14:57:28

+1

但是我會改變你的表名。集團和集團產品。 – PerformanceDBA 2010-10-31 16:46:12

1

Jan的答案是正確的,但不完整。

您還需要促銷的開始和結束日期。您可能需要輸入下週的促銷活動,以便他們準備好,但在適當的時候才能應用它們。

折扣價格可能還不夠。您還需要獲得商業人士的商業規則,以瞭解如何應用折扣。它可能是一個百分比或免費項目或固定金額。如果按百分比均勻分配折扣,按比例分攤最便宜的產品,最貴的是?如果免費項目,該集合中的哪一個是免費的。如果您購買x,y和z,它也可以是固定金額,10美元折扣。是否多次應用折扣。如果有人購買P2和P3的5倍,他們會得到所有這些折扣或只是第一個折扣。一段時間內是否有限制?正如在過去的例子中,如果你不給我所有5的折扣,我只需填寫5個1的順序,並獲得你想要阻止的折扣。如果是這樣,那麼您必須先回顧該客戶以前的購買情況,看看他們是否已收到該折扣。

你可以看到這是多麼醜陋。我會向業務部門澄清他們打算如何使用這個新功能,並通過這些使用案例與他們一起運行。

問:問:如果購買的商品籃子夠大,可能會有多個折扣。你必須確定要提供什麼,你是否向用戶界面展示了一系列選擇......以及重新計算。

這就是爲什麼我憐憫百貨公司誰擰這東西了。這並不簡單。

+2

1.揚的答案已經完成2.你正在回答一個沒有提出的問題。 – PerformanceDBA 2010-10-31 16:42:07

1

從表面上看,這聽起來很簡單,但實際上它非常複雜。

「與這些團體作爲單獨的產品不能正常工作打交道,因爲我需要從組更換,添加或刪除產品的功能。「

這裏有你需要看看幾件事情:

  1. 當前庫存VS過去的訂單
  2. 你如何處理與P1,P2價格變動P3
  3. 怎麼辦您處理向現有組添加新產品或新產品
  4. 如何處理從現有組中刪除產品或產品

我認爲你需要兩組表格。

  • 表,使您的當前庫存
  • 表,用以記錄想客戶所購買的(歷史數據表)

如果您需要重建客戶從半年前購買的,你可以不依賴就目前的數據而言,今天的分組看起來可能不像六個月前那樣。所以,如果您還沒有一套用於客戶記錄的歷史數據表,那麼我建議您創建它們。

有了一套歷史數據表,可以容納客戶購買的東西,你幾乎可以根據當前的基本數據做你想要的。更改價格,重新組合產品,使產品過時,暫時暫停產品等。

+1

確實,你想保留歷史數據。作爲一個「經驗法則」,我嘗試設計數據庫,以便從不刪除或覆蓋數據,只添加到數據庫中。這允許您重建所有歷史狀態。有趣的閱​​讀是Richard Snodgrass撰寫的「在SQL中開發面向時間的數據庫應用程序」,以及[可免費下載](http://www.cs.arizona.edu/~rts/publications.html)。 – 2010-10-31 17:41:41