Sql表存储编辑历史记录

时间:2014-10-14 08:06:41

标签: c# sql sql-server entity-framework

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

记录

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

有很多方法。

1)取一个ParentId列,每当有任何用户编辑记录时,插入带有旧记录ID的ParentId的新记录。所以你将拥有所有历史。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以添加新列version& record_group_id

  1. 添加新记录时,version将为0record_group_id在此表中也是唯一的。
  2. 编辑记录时,version会增加1,但与前一个record_group_id相同。
  3. 删除记录时,只需将最新的IsDeleted设置为True
  4. 因此,在查找记录时,您可以使用versionrecord_group_id的组合来加载最新记录。