2011-01-14 31 views
1

我正在研究一個應用程序,並尋找一個數據庫模式以存儲與價格有關的高效方式的產品銷售。所以我在尋找一個數據庫架構和示例查詢來計算價格爲當月數據庫佈局存儲價格包

背景資料:

  • 的產品價格是根據銷售金額當月
  • 的相同的產品可以有不同的價格(這取決於每個公司價格談判)
  • 需要能夠改變價格,而不會影響較早的銷售/發票
  • 商店的價格不含增值稅,增值稅可以改變

我有這麼遠看起來是這樣的:

銷售

sale_id --PK (auto_incr) 
company_id 
product_type --FK on products.product_type 
sale_date 

產品

product_id --PK (auto_incr) 
company_id (company_id & product_type = Unique_key) 
product_type 

* price_packages *

product_id --FK on products.product_id 
sales_min (total sales need to be between sales_min and sales_max) 
sales_max 
price 
valid_from 
valid_until 
vat_id --FK on vat.vat_id 

增值稅

vat_id --PK (auto_incr) 
vat_percentage 
valid_from 
valid_until 

我認爲這有什麼不對的 「sales_max」 和 「sales_min」 欄目。另外我懷疑這是否是存儲事物的最佳方式。一些建議是值得歡迎的。 (如果可能,請用示例查詢)

如何在不影響以前價格的情況下輸入新價格?

回答

1

訂單完成後,爲什麼不直接將銷售價格和當前增值稅價格寫入「銷售」表格?這是歷史數據,所以可以從產品表複製它。

如果我理解正確的「price_packages」表是如何工作的,將是這樣的:

SELECT 
    product_id 
    , price 
FROM 
    price_packages 
WHERE 
    NOW() BETWEEN valid_from AND valid_until 
    AND $sales BETWEEN sales_min AND sales_max 
    AND product_id IN ($product_ids) 

替換「$銷售」的銷售數量爲這款產品(無論是添加計數器列以產品表或從「銷售」表中計算)

將「$ product_ids」替換爲實際訂單中的產品。

如果您有任何疑問,請告知我。

+0

價格計算在每個月底。根據銷售價格的數量會更便宜。因此,如果我在訂單完成時存儲價格,我可能最終在月初存儲更高的價格,相比之下可以說這個月的最後一天 – 2011-01-19 20:06:32