2011-04-25 108 views
0

当客户下订单时,item_id和option_id存储在order_items表中,从那里它将生成客户的发票。但是,该项目的价格每隔几个月就会更改一次,并且会影响旧的发票信息。发票的历史价格表?

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

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

您能否提供示例如何创建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 |    | 
+----------------+---------+------+-----+---------+----------------+ 

回答

1

检查下列设计出来:

enter image description here

设计1:存储变化的滚动历史的项目(新行如果任何变化:名称,描述,价格)。

设计2:新行仅限价格变动。

或者,您可以将价格与订单本身一起存储。

+0

谢谢你的设计,你会推荐或存储订单本身的价格?在关于新的行..如何做到这一点?例如,如果我更改项目表中的项目名称,那么这是否意味着我需要在选项表中添加新闻重复行?为什么添加StartDate和EndDate字段(在OrderItems表中有一个ItemPriceID字段) – user622378 2011-04-26 00:30:35

+0

如果您有机会,可以请我更新您的设计,以了解上一个问题主题上的orderitems表。谢谢:)这非常有帮助。 – user622378 2011-04-26 00:55:44

1

这是见仁见智的问题,有些人会同意,历史价格查询都会好的,我的看法是,这是不。

查找价格历史和确定发票价格的问题是有很多错误的空间。您将有几个逻辑用于确定合适的价格,所有这些都容易出错。您可能忘记转换发票的时区,这可能会导致它在价格变化的错误一面。您可以忘记使用任何折扣或优惠券代码日期敏感等等。有关更改运费的情况如何?

最好用发票本身存储实际的发票价格。磁盘空间很便宜,在晚上使用冗余睡眠更好。

+0

这不是真的冗余。如果您的价格历史记录表为了修正错误而进行更正,那么查看历史价格并不能保证您将获得与首次发票时相同的价格。此外,由于员工折扣,特别促销和其他调整,许多东西的价格与价格书价格不同。如果您认为它可能派上用场,但可以保留发票项目表上实际收取的价格,您可以保留价格历史记录表,因为它是发票项目的全面属性。 – 2011-04-26 02:03:19

+0

乔尔......这不正是我所说的吗? – 2011-04-26 05:22:32

1

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

如果您想创建一个包含报价使用价格历史记录的表格,那可能没有问题。但是不要为了获得某些物品的价格而给自己一个查询价格历史的痛苦头痛。价格是该项目的一个属性。价格可能会因促销,折扣,优惠等

+0

产品的属性经常发生变化,因此我认为将它们添加到order_items中是最直接的,例如价格,折扣,尺寸。 – 2011-05-03 14:07:31