如何在mysql中保存数据历史记录?

时间:2014-12-11 02:19:27

标签: mysql database

我看到许多线程询问如何在mysql中保存记录的历史记录。但是,我不太确定它们是否适合我的情况。

我正在开发一个包含大量用户信息的申请表。到目前为止,我必须将它标准化为12个表,即使它们中的大多数都具有1:1的关系,但我认为它们在未来的使用中会很好:

  • 用户(ID,全名,用户名,电子邮件,CreatedDate,UpdatedDate,...)
  • 家庭(Id,UserId,姓名,关系,工作......)
  • 地址(Id,UserId,Road,District,Province,...)
  • ...

当客户填写表单中的所有字段时,他们有两个选项,第一,他们可以将其保存为草稿,其次,他们可以确认发送应用程序并且不能再更改它。

到目前为止,我做了一些研究。他们有很多方法可以做到这一点。例如,我可以用一些额外的字段复制所有表格; VERSIONID。然而,由于桌子数量庞大,我认为这不是一个好主意。

所以,我认为将VersionId添加到每个现有表中。当他们将表单保存为草稿时,我只是在不触及VersionId字段的情况下放置信息,但是,每当用户确认提交申请时,我会将VersionId增加1。

任何建议都会受到欢迎。

2 个答案:

答案 0 :(得分:1)

为每个表添加status列。它可以包含值draftcurrenthistory

当用户更改其数据时,请使用status = draft创建一个新行。在编辑时,您可以修改该行。确认更改后,您将旧current行的状态设置为history,并将草稿行的状态设置为current

答案 1 :(得分:0)

我认为这主要取决于业务需求(因为对于同一用户来说听起来不会有这么多更新我假设性能不是一个问题,但你可能也想考虑一下在这种情况下插入比更新便宜)。

因此,您需要问自己的问题是,企业是否要求您保留历史记录?例如,如果用户A填写表格,稍后他会更新一些信息,例如他有一个新地址,你想知道他以前的地址是什么吗?如果你这样做,你必须存储它们(我会添加除版本ID之外的更改日期)