我有这张桌子
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
问题是,加班,物品的价格会发生变化。
防止更改旧交易历史记录的价格
我需要一种方法来保持旧物品的价格。
如何制作正确的数据库设计来解决这个问题?
答案 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