gpt4 book ai didi

MySQL - 如何处理历史数据?

转载 作者:行者123 更新时间:2023-11-30 21:44:33 25 4
gpt4 key购买 nike

我是数据库设计领域的新手,但一直在为我为工作开发的应用程序构建一个(对我而言)相当复杂的系统。

我将在此处使用示例,因为发布我的实际数据库结构会太多。

假设我有一个待售的[products]表和另一个记录所有个体[sales]的表。

[sales] 表包含引用 [products] 表中的 id 的外键。但是,随着时间的推移,该 product 可能不再可用,需要从 [products] 表中完全删除。

显然,通过从 [sales] 表中指向该 product 的 FK,我可以限制删除 product(noaction ), 删除sale记录(cascade), 或者设置product为空(setnull)。这些选项都不合适,因为我们仍然需要知道在那次sale 中售出了哪些product

我想到的几个解决方案

  1. 不是从 [products] 表中删除 product,我可以将其标记为“不活动”或“不可用”。
  2. product 的重复记录插入到单独的“历史”表中,并更新 [sales] 表的 FK 以指向那里。然后从[products]表中删除原来的记录。
  3. 完全删除外键并相信我的应用程序能够自行正确处理链接(即:不是指向 product_id 的 FK,而是我的 [sales]表可以改为使用 VARCHAR 作为 product_name,需要文本匹配来检索额外的 product 详细信息)。 ****坏主意****

有什么方法可以实现这一点?

最佳答案

还没有获得到处评论的权利,所以我来这里发帖回答,我支持 inactive 标签,因为删除信息尤其是在别处引用的信息可能会很悲惨。如果你想让它更有趣,方法如下:如果产品可以处于非事件状态然后再次事件并且您想跟踪特定于这些时间段的信息怎么办?或者,如果产品的价格不断变化(并且列在产品表中)但您想根据当时的价格跟踪历史销售额怎么办?

您基本上必须创建一个星级设置,在该设置中,您可以根据每个新的重大更改对产品进行版本控制,并为它们提供 change_keys。这样,您就可以返回并引用产品的所有不同实例。

关于MySQL - 如何处理历史数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014138/

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