在MySQL中存储表行的更改/版本?

发布时间:2020-07-07 15:04

我希望能够查看并查询PHP对表行的更改,以便可以查看历史记录。

例如,如果有人更改产品名称的标题,我可以看到不同的版本以及更改的时间。

解决此问题的最佳方法是什么,MySQL是否具有处理此问题的特殊功能?或者是为历史更改创建表的情况,该表的字段的日期先于特定字段,然后更改为特定日期?

回答1

在数据仓库中,通常有2种方法:

  1. 创建缓慢移动的维度
  2. 按照上面的建议创建审核表

1)尺寸移动缓慢或变化缓慢

这些功能非常适合跟踪给定时间的多个更改-可能同时更改1个或多个值-将所有更改和未更改的数据存储在新行中-由时间戳标识。

不太擅长了解哪些特定数据已更改。 擅长显示股票等的当前头寸。

例如,如果您的产品表当前包含:

PRODUCT_ID
PRODUCT_NAME
PRODUCT_COST

您将添加其他字段来跟踪更改,例如

VALID_FROM
VALID_TO

添加产品时,VALID_FROM将是其添加的日期时间,而VALID_TO将是添加的日期,例如31DEC3000...。请注意,该记录在更改之前始终有效。

更新PRODUCT时: 将VALID_TO为31DEC3000的旧产品记录更改为当前DATETIME 和 添加一条新记录,其中VALID_FROM为当前日期时间... VALID_TO将为您确定的未来日期时间。

每当您查询数据时,都需要知道何时要将数据设为“原样”,这样您就可以使用以下查询:

where AS_OF_DATETIME is between (VALID_FROM and VALID_TO)

2)审核表方法

“审核”表存储各个变量更改,通常由一组标准列组成。

这很好地知道哪些特定数据已更改。 不太擅长显示股票等的当前头寸。

TABLE    /* Table the Changes were made */
ID       /* ID or key to the data in the table */
VARIABLE /* The name of the variable that changed */
DATETIME /* Date and Time of the Change */
BEFORE   /* The Value of the variable before the Change */
AFTER    /* The Value of the Variable after the change */
USER     /* Who made the change */
PROCESS  /* By what process the change was made */