![](/img/trans.png)
[英]Maintaining data integrity in mysql when different applications are accessing it
[英]Maintaining order data integrity with constant edits
假设,如果我使用的系统可以跟踪多个表(订单,订单项,产品)中的产品和订单信息
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中复制名称,描述和价格吗?
我认为这是数据库规范化“中断”的情况之一。
一些可能的解决方
备选方案1的提案
创建products
表的副本,并为order_details
表创建每个订单和订单明细的关系(一对一)。
备选方案2的提案
将products
表拆分为两个: product_general_info
和product_attributes
。 产品常规信息在时间上是稳定的(产品的一般信息不会改变),因为对此表中数据的任何修改都将传播到整个订单集。 产品属性必须具有date
或timestamp
值,以定义属性更改的时间。 然后,您可以查询数据库并返回订单日期之前或之后的最后一条记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.