跟踪订单更改的最佳设计

Posted

技术标签:

【中文标题】跟踪订单更改的最佳设计【英文标题】:Best design for tracking Order changes 【发布时间】:2020-03-11 21:39:00 【问题描述】:

需要跟踪订单的后续变化;

谁创建了订单以及何时创建的 谁添加/更新/删除了具有数量和时间的项目

我有这个想法,但不确定它是否有好处,另外不确定命名约定

LogEventType

身份证 类型(即更新、删除、添加)

订单记录

日志ID EventType (FK_LogOperation_ID) 订单编号 项目编号 数量 用户名

【问题讨论】:

你已经有一个Order表了吗?它是什么样的表? type1 还是 type2(保留历史记录)? 是的,有订单抬头和明细表。 你保留历史记录吗? 不,不需要。 您可以使用触发器 (GASP) 并将数据记录到新表中以跟踪该信息。或启用 CDC。或者使用扩展事件 【参考方案1】:

在不深入更改现有设置和最少工作量的情况下,我会这样做。我欢迎批评。

我假设当有人删除/添加一个项目时,订单标题和详细信息表会立即使用新信息更新(类型 1 - 就地更新)

为此, 我会将 ORDERLOG 更改为 ORDERHISTORY。在其中,我将拥有当前订单及其任何更改。这将是一个追加。新订单将创造新纪录。更新是另一条新记录,等等。

将 ORDER_HEADER 和 ORDER_HISTORY 中的所有字段复制到 ORDERHISTORY。然后添加用于更改检测、当前和更改日期的列。还有更多内容,但现在可以使用。这取决于您,但您可以制作如下列:

CHANGE_TYPE CHAR(1) -- 'A' to add, 'C' to change, 'D' to delete.
IS_CURRENT INT -- 1 is latest record, 0 is not
EFFECTIVE_DATE  DATETIME -- GETEDATE() when record is inserted

当某事发生时,在 ORDERHISTORY 中插入一条记录。遵循上述业务规则,您将能够看到订单从初始到最终的完整历史记录。

您可以在 ORDER_HEADER 表上设置触发器,以便在该表以任何方式受到影响时插入记录。

请注意,这会造成表格蠕变,因此请确保在不再需要时存档或删除。

【讨论】:

以上是关于跟踪订单更改的最佳设计的主要内容,如果未能解决你的问题,请参考以下文章

什么是 SSIS 包部署和更改跟踪最佳实践?

车载GPS跟踪设备

SQL查询以跟踪新订单或旧订单中的余额变化,没有日期

数据仓库设计:如何设计交货日期变化的事实和维度表

问题设计审计表以跟踪更改

液化石油气。如何跟踪存储过程更改