Database design 如何跟踪包含多对多映射表的db表的历史记录?

Database design 如何跟踪包含多对多映射表的db表的历史记录?,database-design,versioning,Database Design,Versioning,我在这里看到了一些关于跟踪数据库历史的问题,但似乎找不到一个与我们的情况相匹配的问题。我们需要跟踪几个表的历史记录,其中一些是多对多链接表。例如,假设我们有这个模式: EntityA id name EntityB id name ABLink A_id B_id 因此,跟踪对EntityA或EntityB的更改似乎非常简单。我们可以保留一个日志表,该表具有相同的列以及日期戳和用户。但是链接呢?我们如何维护对给定数据版本有效的链接集?我们需要能够重新创建数据的历史记录,显示按时间顺序的变化

我在这里看到了一些关于跟踪数据库历史的问题,但似乎找不到一个与我们的情况相匹配的问题。我们需要跟踪几个表的历史记录,其中一些是多对多链接表。例如,假设我们有这个模式:

EntityA
id
name

EntityB
id
name

ABLink
A_id
B_id

因此,跟踪对EntityA或EntityB的更改似乎非常简单。我们可以保留一个日志表,该表具有相同的列以及日期戳和用户。但是链接呢?我们如何维护对给定数据版本有效的链接集?我们需要能够重新创建数据的历史记录,显示按时间顺序的变化。因此,如果添加或删除了链接,我们会指出。等等。

创建一个ABLink日志表(如果需要,可以使用自己的主键),该表具有指向EntityA和EntityB日志表的外键链接。您可以向日志表中添加一个change_type列,以指示日志条目是否为insert/update/delete—当然,多对多日志表不应包含任何更新change_type条目:

ABLink_Log       EntityA_Log     EntityB_Log
----------       -----------     -----------
id               id              id
A_Log_id         name            name
B_Log_id         change_type     change_type
change_type      date_stamp      date_stamp
date_stamp       user_id         user_id
user_id