发票的历史价格表?

时间:2011-04-25 20:08:19

标签: mysql sql database database-design e-commerce

当客户下订单时,item_id和option_id存储在order_items表中,从那里它将为客户生成发票。但是,物品的价格每隔几个月就会发生变化,这会影响旧的发票信息。

解决此问题的解决方案是什么?我不想将价格和商品名称存​​储在order_items表格中。

我已经阅读过可能的解决方案是创建history_prices表(通过触发器审计系统或通过php手动进行SQL插入查询?),是审计最佳解决方案还是有其他解决方案?

您能举例说明如何创建history_prices表格,因此当我从item_options.option_price更改价格时 - 它会存储到history_prices表中吗?

现在我在item_options表中有超过200,000行,是否需要将价格复制到history_prices?

我需要一种有效的方式,因此发票不会受到新价格变化的影响。

item_options表:

mysql> desc item_options;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| option_id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| item_id       | int(11)      | YES  | MUL | NULL    |                |
| option_name   | varchar(100) | YES  |     | NULL    |                |
| option_price  | int(11)      | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

order_items表:

mysql> desc order_items;
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| order_items_id | int(11) | NO   | PRI | NULL    | auto_increment |
| order_id       | int(11) | NO   |     | NULL    |                |
| item_id        | int(11) | NO   |     | NULL    |                |
| option_id      | int(11) | NO   |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+

3 个答案:

答案 0 :(得分:1)

这是一个意见问题,有些人会同意历史价格查询是可以的,我认为不是。

查找价格历史并确定发票价格的问题是存在大量错误的余地。您将使用几个逻辑来确定合适的价格,所有这些都容易出错。您可能忘记转换发票的时区,这可能会导致价格变化的错误。您可能忘记将任何应用的折扣或优惠券代码设置为日期敏感等等。如何更改运费?

最好将实际发票价格与发票本身一起存储。磁盘空间便宜,使用冗余在晚上睡得更好。

答案 1 :(得分:1)

您可以做的最好的事情是在价格order_items中创建一个列。这也是最直接的。

如果您想创建一个包含价格历史记录以供报告使用的表格,那可能没问题。但是,为了得到一些物品的价格,不要让自己痛苦地查询价格历史。价格是商品的属性。由于促销,折扣,特价等,价格可能会发生变化。

答案 2 :(得分:1)

检查以下设计:

enter image description here

设计1:存储项目更改的滚动历史记录(如果有任何更改,则为新行:名称,描述,价格)。

设计2:仅在价格变化上的新行。

或者,您可以使用订单本身存储价格。