gpt4 book ai didi

mysql - 是否可以存储冗余数据以防外表记录被删除

转载 作者:行者123 更新时间:2023-11-29 06:55:55 24 4
gpt4 key购买 nike

假设我有一个名为 products 的数据库表,其中包含产品列表,主键为 product_id

然后,我有一个名为 purchase_order_products 的数据库表,其中包含分配给采购订单的产品列表,并带有外键 product_id

现在,如果我在两个表之间强制执行引用完整性,则只需要一个采购订单来引用产品,并且不可能从数据库中删除该特定产品(除非该采购订单产品也被删除)。

看来我有几个选择:

1) 强制引用完整性,并且不允许产品被删除。

2) 不要强制引用完整性,如果有人查看了产品不再存在的采购订单,只需将产品名称显示为“未知”或“已删除”即可。

3) 最后一个选项是不仅将产品名称存储在 products 表中,还将其与外键一起存储在 purchase_order_products 表中。显然,这是冗余数据,但它允许从 products 表中删除产品,同时仍然允许用户查看过去属于采购订单的现在不存在的产品的名称.

我倾向于选项#3,但想知道处理这个问题的“正确”方法是什么。

最佳答案

您可以强制引用完整性并使用 ON DELETE SET NULL ,然后当采购订单 product_id 时显示“未知”或“已删除”一片空白。因此,选项 1 和 2 并不相互排斥。

选项 3 有效。拥有两份 product_name如果它们在表达不同谓词中使用的关系并不多余。 Product <x>'s current name is <y>When purchase_order <z> was created, product <x>'s name was <y> 不同。分别记录当前价格和历史价格是一种常见的技术,对于产品的名称或任何其他属性也可以执行相同的操作。

关于mysql - 是否可以存储冗余数据以防外表记录被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642051/

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