gpt4 book ai didi

mysql - 通过不断的编辑维护订单数据的完整性

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:23 25 4
gpt4 key购买 nike

假设,如果我有一个跨多个表(订单、订单项目、产品)跟踪产品和订单信息的系统

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_itemsorder_items有一个product

问题是当有人编辑产品时,这些编辑会修改以前订单的数据。如果员工稍后要回去查看该信息,他们可能无法获得客户在下订单时收到的相同信息。

什么是最佳实践?我应该在产品表中添加一个“display_item”字段,并在编辑/删除时将显示设置为 0 并将编辑后的产品添加为新行吗?我应该在 order_details 中复制名称、描述和价格吗?

最佳答案

我认为这是数据库规范化“中断”的情况之一。

一些可能的解决方案:

  1. 为每个订单保留一份产品属性的副本。这在存储方面很昂贵,但可以更轻松地追踪订单中存储的产品数据。
  2. 创建可以及时更改的属性日志。产品属性可以随时间更改,因此存储修改日期的日志可以帮助您筛选出订单时刻的产品属性制作完成。

选项 1 的提案

创建 products 表的副本,并为每个订单创建与 order_details 表的关系(一对一)订单详情。

选项 2 的提案

products 表分成两部分:product_general_infoproduct_attributes。产品一般信息应随着时间的推移保持稳定(产品的一般信息不会更改),因为对此表中数据的任何修改都会传播到整个订单集。产品属性必须有一个 datetimestamp 值来定义属性更改的时间。然后您可以查询数据库并返回订单日期之前或当天的最后一条记录。

关于mysql - 通过不断的编辑维护订单数据的完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19306098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com