跟踪订单更改的最佳设计
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 表上设置触发器,以便在该表以任何方式受到影响时插入记录。
请注意,这会造成表格蠕变,因此请确保在不再需要时存档或删除。
【讨论】:
以上是关于跟踪订单更改的最佳设计的主要内容,如果未能解决你的问题,请参考以下文章