数据库中每个项目的价格历史记录

时间:2014-03-13 08:48:41

标签: php mysql sql database

我有这张桌子

Transactions
- id
- user_id // this will point to which user did this transaction
- item_id // this will point to which item in this transaction
- date


Products
- id
- name


Items
- id
- product_id // this will point to which product this item is
- name
- price

问题是,加班,物品的价格会发生变化。
防止更改旧交易历史记录的价格
我需要一种方法来保持旧物品的价格。

如何制作正确的数据库设计来解决这个问题?

4 个答案:

答案 0 :(得分:1)

您需要在交易中添加此信息:

Transaction
 - id
 - user_id
 - item_id
 - item_price
 - any_other_transaction_specific_info

这也允许您对每笔交易的实际价格应用折扣或任何其他修改。

答案 1 :(得分:1)

在交易表中使用价格列完成交易时,最好能够保存当前的产品价格。

Transactions
- id
- user_id // this will point to which user did this transaction
- item_id // this will point to which item in this transaction
- date
- price

答案 2 :(得分:0)

我认为您可以为每个交易记录定义date。另一方面,您可以使用另一个表来记录产品价格priceLogs.(like: product_id, price and date)。只要产品的价格发生变化,就会在表格中添加一条记录。这也将帮助您解决更多业务问题,以跟踪产品价格。

您需要根据交易日期查询每种产品的价格。这可能会让您在查询中编写一些连接。

答案 3 :(得分:0)

在我看来,您应该创建另一个表作为Item_Pricing,这应该可以帮助您最终确定定价历史记录。表Item_Pricing历史记录应该类似于Item_Pricing(id [PK],itm_id [FK],price, price_still_in_use ,date_price_created,...)。这个想法是colum price_still_in_use 应该被视为一个可以有值1(是)或0(否)的标志。然后在您的表交易中,这是应该考虑的价格。然后,每笔交易或销售都应与仍在使用的定价相关:

交易 (id [PK],..., item_pricing_id [FK] //这将指向Item_Pricing(item_pricing_id),数量,日期)

因此,如果您的应用中的商品价格发生变化,则不再使用该商品的价格将不再可用。触发器也可以帮助您获得最佳效果,这样同一项目就不会有多个价格为该列的值为yes(属性) price_still_in_use