2011-01-14 48 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