假设,如果我使用的系统可以跟踪多个表(订单,订单项,产品)中的产品和订单信息
orders
id INT(11)
shipping_name VARCHAR(255)
shipping_street VARCHAR(255)
shipping_city VARCHAR(255)
[etc]
order_details
id INT(11)
order_id INT(11)
product_id INT(11)
products
id INT(11)
name VARCHAR(255)
description VARCHAR(255)
price DECIMAL(8,2)
结构非常简单order
有多个order_items
,order_items
有一个product
。
问题在于,当有人编辑产品时,这些编辑会修改以前订单的数据。如果员工稍后返回查看该信息,则可能与订单下达时客户收到的信息不同。
什么是最佳做法? 我应该在products表中添加'display_item'字段,并在编辑/删除设置显示为0并将编辑后的产品添加为新行? 我应该在order_details中复制名称,描述和价格吗?
答案 0 :(得分:0)
我认为这是数据库规范化“中断”的情况之一。
一些可能的解决方案:
选项1的提案
创建products
表的副本,并为每个订单和订单详细信息创建order_details
表的关系(一对一)。
选项2的提案
将products
表分成两部分:product_general_info
和product_attributes
。产品常规信息在时间上是稳定的(产品的一般信息不会改变),因为对此表中数据的任何修改都将传播到整个订单集。产品属性必须具有date
或timestamp
值才能定义属性更改的时间。然后,您可以查询数据库并返回订单日期之前或之后的最后一条记录。