在可见之前,需要批准的数据库记录存储更改的最佳方法是什么?

pat*_*ech 40 database-design

我需要将用户输入的更改存储到特定表中,但在管理用户查看和批准之前不会显示这些更改.虽然这些更改仍处于暂挂状态,但我仍会显示旧版本的数据.存储这些变更等待批准的最佳方法是什么?

我想过几种方法,但无法弄清楚什么是最好的方法.这是一个非常小的网络应用程序.一种方法是使PendingChanges表模仿其他表的模式,然后一旦批准更改,我就可以用信息更新真实表.另一种方法是进行某种记录版本控制,其中我在表中存储多个版本的数据,然后始终使用已标记为已批准的最高版本号来提取记录.这将限制额外表的数量(我需要为多个表执行此操作),但每次我提取一组记录以确保获得正确的记录时,我需要进行额外的处理.

这些方法或其他可能有用的个人经历?

更新:只是为了澄清,在这种特殊情况下,我对历史数据不感兴趣.我只需要某种方式来批准用户在网站上发布之前所做的任何更改.因此,用户将编辑他们的"配置文件",然后管理员将查看该修改并批准它.一旦获得批准,这将成为显示的值,并且不需要保留旧版本.

是否有人尝试过以下解决方案,您可以在任何需要在特殊PendingChanges表中将其作为XML跟踪的表中存储挂起的更改?每个记录都有一个列,表示更改所针对的表,可能存储将要更改的记录的id的列(如果是新记录则为null),更改时存储的日期时间列,以及用于存储已更改记录的xml的列(可以序列化我的数据对象).由于我不需要历史记录,因此在批准更改后,将更新真实表并删除PendingChange记录.

有关该方法的任何想法?

nsa*_*yer 20

绝对将它们存储在主表中,并带有一列以指示数据是否被批准.

更改得到批准后,无需复制.过滤未经批准的数据的额外工作是数据库在您考虑它时应该做的事情.如果您对批准的列进行索引,那么做正确的事情不应该太繁琐.

  • 这基本上是反向的软删除. (2认同)

小智 9

大小是你的敌人.如果你正在处理大量的数据和大量的行,那么将历史与当前混合在一起将会打击你.如果你加入其他数据并确保你有正确的行,你也会遇到问题.

如果您需要保存历史数据以显示随时间的变化,我会使用单独的历史数据表,一旦获得批准,即可更新实时数据.它只是全方位清洁.

如果您有很多具有此机制但不需要保留历史记录的数据类型,我建议使用一个常见的队列来检查待处理的项目,比如存储为xml.这将允许管理员只读取一个表,并使您能够相当容易地将此​​功能添加到系统中的任何表.

  • 你如何处理更改名称的列?您有许多待处理元素,现在您的待处理数据与它们将存储的列不匹配. (2认同)

Viv*_*ira 5

我在银行业工作,我们有这个需要-一个用户所做的更改必须在另一个用户批准后才能反映出来。我们使用的设计如下

  1. 主表A
  2. 另一个表B存储更改后的记录(因此与第一个完全相似)+ 2个附加列(C的FKey和指示更改种类的代码)
  3. 第三个表C存储所有需要批准的此类记录
  4. 存储历史记录的第四个表D(您可能不需要这个)。

我推荐这种方法。它非常优雅地处理所有情况,包括更新和删除。