Sql表存储编辑历史记录

本文关键字:历史 记录 编辑 存储 Sql | 更新日期: 2023-09-27 18:26:35

我正在处理一个使用sql server数据库存储数据的项目。我有一张桌子:

记录

  Id                   - (PK)
  RecordTitle          - (varchar(400))
  IsDeleted            - (bit)
  LastUpdatedAtUtc     - (long - unix timestamp)
  LastUpdatedById      - (FK to UserTable)

用户可以添加/编辑/删除多个记录。因此UserTable和RecordTable之间的关系是1对多

我想将记录的编辑/删除历史记录存储在同一个表中。因此,如果记录被删除,我们只需设置IsDelete列值True

同样,我想将编辑历史记录存储在同一个表中。这样,每当用户编辑任何记录时,原始记录都不会被更改,而是插入一个带有更改的新记录。

我想知道处理这个问题的有效方法应该是什么。我们需要在记录表中添加新列来存储编辑历史记录吗。如果是,那么这些列是什么?

Sql表存储编辑历史记录

有很多方法。

1) 取一列ParentId,每当任何用户编辑该记录时,都会插入ParentId为旧记录Id的新记录。这样,您就可以拥有所有历史记录。

2) 取另一个名为history表的表,将旧记录保存在该表中,并在原始表中进行更新。不要忘记将原始表的id作为一个单独的列。

3) 您可以将一列作为history_column,在其中可以保存从OLD更改为NEW的字符串。

您可以添加新列version&CCD_ 2。

  1. 添加新记录时,version将为0record_group_id在该表中也是唯一的
  2. 在编辑记录时,version将增加一,但它具有与前一个相同的record_group_id
  3. 删除记录时,只需将最新记录的IsDeleted设置为True即可

因此,在查找记录时,可以使用versionrecord_group_id的组合来加载最新的记录。

将一个名为ParentRowId的字段添加到表中,并在同一表上建立1对1的关系,此列包含旧编辑记录的id,新列包含新值。