在 MySQL 中存储 table 行的 changes/versions?

Storing changes/versions of a table row in MySQL?

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

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

解决此问题的最佳方法是什么,MySQL 是否有特殊功能来处理此问题,或者是否需要为历史更改创建一个 table,其中日期字段更改之前在特定领域之后?

在一个数据仓库中一般有2种方法:

  1. 创建一个缓慢移动的维度
  2. 按照上面的建议创建审计Table

1) 缓慢移动或缓慢变化的维度

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

不太清楚具体的数据发生了哪些变化。 擅长显示股票当前位置等

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

PRODUCT_ID
PRODUCT_NAME
PRODUCT_COST

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

VALID_FROM
VALID_TO

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

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

任何时候你查询你的数据你需要知道什么时候你希望数据是 'As Of' 这样你就可以查询类似 :

where AS_OF_DATETIME is between (VALID_FROM and VALID_TO)

2) 审核Table 方法

审计 table 存储单个变量更改,通常由一组标准列组成。

这非常适合了解哪些特定数据发生了变化。 不太擅长显示股票等的当前位置

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 */