2011-12-20 33 views
10

我正在建設電子商務網站,並希望在特定時間內提供某些商品的折扣。如何模擬數據庫中物品的折扣?

我的產品表(MySQL的)看起來像這樣:

 
Product 
    - productId 
    - Name 
    - Weight 
    - Price (price as on the cover of the item) 

我應該做的配套另一個表:

 
Deals 
- dealID 
- productID (Foreign Key) 
- discount (fractional value: percentage) 
- description 

對於檢索項目:

  • Q1:找到所有productID爲產品中的產品=交易表中的所有產品ID
  • Q2:從交易表更新與優惠的價格
  • Q3:返回所有產品

有沒有更好的方式來做到這一點?另外,我如何處理只在有限時間內存在的交易案例?

編輯: 我想顯示我們提供每個產品多少折扣。因此,我需要每個產品的兩個價值,原始價格和給定期間的折扣價格。

我發佈了後續通過的crontab here

回答

8

您可能會考慮在Deals表中添加開始時間戳和結束時間戳。這樣,您可以檢查以確保當前日期在交易的開始日期和結束日期之間。

您的Deals表格並非真的需要dealID - 它可以用productID和折扣的開始日期鍵入。此外,根據給定物品的價格可能會有多高,請記住使您的區域足夠精確(如DECIMAL 12,8)。

如果是我,我真的離開價格Product表,並創建一個ProductPricing表而不是創建一個Deals表。 ProductPricing表將包含productID和作爲關鍵字段的開始時間戳,然後還具有結束時間戳以指示價格何時改變。當然,該項目的價格。

+0

與產品價格表,你可能甚至不需要交易表..日期是關鍵。 – Randy 2011-12-20 14:09:54

+1

@Randy:這就是爲什麼我說「而不是創建交易表」。 ;) – Crontab 2011-12-20 14:28:03

+0

@Crontab ProductPricing方法是一個很好的解決方案,因爲它具有額外的好處,允許對並非來自交易/促銷(例如價格上漲)的產品進行價格調整。您甚至可以在ProductPricing表上存儲上次價格變動的原因。 – 2011-12-20 14:33:06

1

我會用一個小數點的折扣列提出的解決方案。

價格*折扣= $量過

價格 - $金額=關閉價格車

對於有限的時間,你可以把在截止日期欄,並且只返回未過期行。

2

需要考慮的另一件事是,如何在給定物品沒有折扣的情況下模擬情況?您可以在這裏使用Null Object模式 - 基本上,在創建產品時,您還可以在該產品上添加0%折扣和無限時間的交易。這樣,您可以簡化您的產品檢索邏輯(查詢中不需要外連接,計算價格時不需要if)。

0

我想補充discountPrice,discountPercentage,endDiscountDate列於表產品 和CREATE TABLE折扣記錄來打折跟蹤

然後選擇無需連接表時,你可以通過檢查endDiscountDate

選擇正確的價格
相關問題