数据库布局存储价格包

时间:2011-01-14 18:00:33

标签: mysql database-design

我正在开发一个应用程序并寻找一个数据库模式,以便以与价格相关的有效方式存储产品销售。所以我正在寻找一个数据库模式和一个示例查询来计算该月的价格

背景信息:

  • 产品价格基于该月的销售额
  • 相同的产品可以有不同的价格(取决于每家公司的价格谈判)
  • 需要能够在不影响早期销售/发票的情况下更改价格
  • 不含增值税的商店价格,增值税可以更改

到目前为止我看到的是这样的:

销售

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 个答案:

答案 0 :(得分: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)

将“$ sales”替换为此产品的销售数量(将计数器列添加到产品表或从“sales”表中计算)

将“$ product_ids”替换为实际订单中的产品。

如果您有疑问,请告诉我。