gpt4 book ai didi

mysql - 关系数据库 : Current Data vs. 历史数据,最佳实践

转载 作者:可可西里 更新时间:2023-11-01 09:00:05 26 4
gpt4 key购买 nike

让我们以关系数据库为例,例如MySQL。为了简单起见,我将专注于重要的事情:有一个包含订单的表,其中包含 order_id(主键)order_date 和外键 fk_supplier 等字段,引用表 supplier 中的主键。该表还有一个名为 supplier_name 的字段。现在,让我们想象一下,有一个 php 网站显示了表格中的所有订单。表的每一行都包含 order_idorder_date 和 supplier_name(sql 语句对两个表进行了连接)。到目前为止一切都很好。现在,有人更改了其中一个订单中引用的一个供应商的名称:历史数据变得不真实或错误。我的问题是:防止这种情况的最佳做法是什么?我想到了三种解决方案:

  1. 不要让用户更改订单中引用的供应商数据行。如果名称发生变化,让他添加新的供应商。
  2. 始终将当前供应商数据(例如供应商名称)与订单记录一起保存,不要使用主键/外键引用。
  3. 引入时间片:每当供应商的一个重要属性(如名称)发生变化时,创建一个新的时间片。不仅要引用订单中的 supplier_id,还要引用相应的时间片。

所有这些方法都有优点和缺点。例如,第 2 点看起来很脏,并且违反了关系数据库的所有规则。在我看来,第 3 点通常是可行的方法。但是需要很多努力,编程明智。用户体验/可用性也变得非常糟糕。

我想听听经验丰富的开发人员和数据库设计人员如何处理该问题。

最佳答案

选项 3 的一种形式,其中您有关于供应商信息的开始日期和结束日期。这样,数据始终是准确的(供应商名称在给定时间是正确的)。您还可以做的一件事是创建一个电子表格,每晚将其内容加载到具有供应商信息的数据库中(到 fact_Supplier 表或查找表中)。对供应商的所有编辑都通过此电子表格进行,访问权限仅授予那些负责此类事情的选定人员。如果电子表格中有更改,供应商表中的先前信息将结束日期,并插入包含新信息的新记录。任何更改都会导致这种情况发生,供应商名称、供应商地址等。

关于mysql - 关系数据库 : Current Data vs. 历史数据,最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47179644/

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