当客户下订单时,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 | |
+----------------+---------+------+-----+---------+----------------+
答案 0 :(得分:1)
这是一个意见问题,有些人会同意历史价格查询是可以的,我认为不是。
查找价格历史并确定发票价格的问题是存在大量错误的余地。您将使用几个逻辑来确定合适的价格,所有这些都容易出错。您可能忘记转换发票的时区,这可能会导致价格变化的错误。您可能忘记将任何应用的折扣或优惠券代码设置为日期敏感等等。如何更改运费?
最好将实际发票价格与发票本身一起存储。磁盘空间便宜,使用冗余在晚上睡得更好。
答案 1 :(得分:1)
您可以做的最好的事情是在价格order_items
中创建一个列。这也是最直接的。
如果您想创建一个包含价格历史记录以供报告使用的表格,那可能没问题。但是,为了得到一些物品的价格,不要让自己痛苦地查询价格历史。价格是商品的属性。由于促销,折扣,特价等,价格可能会发生变化。
答案 2 :(得分:1)
检查以下设计:
设计1:存储项目更改的滚动历史记录(如果有任何更改,则为新行:名称,描述,价格)。
设计2:仅在价格变化上的新行。
或者,您可以使用订单本身存储价格。