什么是最好的方式储存的变化的数据库记录,需要获得批准之前可见?

StackOverflow https://stackoverflow.com/questions/103766

  •  01-07-2019
  •  | 
  •  

我需要存储用户输入的变化的特定表格,但没有显示这些变化,直到他们已经观察并核准了由一个管理用户。虽然这些变化仍在待审状态,我仍然显示的旧版的数据。什么是最好的方式储存这些变化等待批准?

我已经想的几种方式,但不能找出什么是最好的方法。这是一个非常小的网络应用程序。一种方法将是要有一个PendingChanges表模仿其他表格的模式,然后一旦改变被批准,我可以更新的现实表的信息。另一种办法是要做某种形式的记录版本控制其储存的多个版本表中的数据,然后总是拉记录最高的版本号,已经被标记批准。这将限制数量的额外的表(我需要这样做,对多个表),但将需要我做的额外处理我每次拔出设置的记录,以确保我获得正确的。

任何个人的经历,与这些方法或其他人,可能是很好吗?

更新:只是为了澄清,在这种特定情况下我没有兴趣这么多的历史数据。我只是需要一些方法核准的任何变化,由一个用户前他们去住的网站上。所以,用户将编辑他们的"资料"和随后的管理员,将会看出这一修改和批准。一旦获得批准,将成为所显示的价值和旧的版本不需要被保留。

有人试图解决下面存储待的变化,从任何表,需要追踪他们作为XML在一个特殊的PendingChanges表?每一记录将列,说这表的变化是,列,可能存储的记录,该记录将会被改变(null如果这是个新记录),a datetime列存储当更改,并列存储xml的改变记录(也许可以serialize我的数据对象)。因为我不需要历史,后一改变获得核准,真正的表格更新和PendingChange记录可予以删除。

任何想法,这种方法?

有帮助吗?

解决方案

大小是你的敌人。如果你正在处理的大量数据和大量行,然后具有历史文化混合在一起的目前的会锤你。你也有问题,如果你加入了其他的数据使得确定你已经得到了正确行。

如果你需要保存的历史数据,以便显示随时间变化,我将与独立的历史,表明更新的生活,真实的数据一旦获得批准。这只是全面的清洁。

如果你有一个很大的数据类型将有这种机制,但不需要保持历史的记录,我想建议一个共同的队列服务在旅途中圣代审查未决的项目,说存储为xml。这将允许只有一个表以读通过管理员,并将使你能够添加这种功能以任何表,在你的系统相当容易。

其他提示

肯定它们存在的主要表列指示数据是否批准或不行。

当变化是获得批准,没有复制是必需的。额外的工作过滤器的未经批准的数据是事情的数据库都应该做到,当你想到它。如果你指数的批准柱,它不应太繁琐的做正确的事情。

我工作在银行领域,我们有这种需要的变化,由一个用户都必须仅仅反映在被批准的另一个。设计我们使用如下

  1. 主要的表A
  2. 另一个表格B储存的变更记录(和因此,正是类似于第一)+2个额外的列(一FKey至C和代码,以表明这种变化)
  3. 第三个表C储存所有此种记录的需要批准
  4. 第四个表D,商店的历史记录(你可能不需要此)。

我推荐这种方法。它处理的所有情况,包括更新和缺失很优雅。

鉴于SOx合规性运动,已经把在面对最公开交易的公司,我已经有相当多的经验,在这个区域。通常我一直在使用一个单独表有时间标记以待的改变与某种标志柱。人负责管理这个数据得到的名单有待改变,并且可以选择接受或不接受。当一块的数据得到接受,我用触发整合的新的数据入表中。虽然有些人不喜欢触发的方法和宁代码这个进入存放处.这工作很适合我,甚至在相当大的数据库。复杂性可以获得有点难以处理,尤其是在处理的情况,其中一个变化的直接冲突的另一个变化,什么样的顺序来处理这些变化。表举行的请求数据不能够被删除,因为它拥有的"面包屑"可以这么说,都需要在情况有需要跟踪后发生了什么在特定情况。但在任何办法,风险需要进行评估,例如我所提到的相互矛盾的数据,和一个商业逻辑层需要在地方,以确定该进程在这些情况。

我不喜欢同样表的方法,因为在该情况的数据存储,正在不断改变,这个额外的表中的数据可能会不必要地停下来,请求在表,并将需要很多细节你是如何编制索引表和执行计划。

我会创造一个表格有一个标志,并创建一个图像

 CREATE OR REPLACE VIEW AS 

  SELECT * FROM my_table where approved = 1

它可以帮助独立之间的依赖关系的aprovement和查询。但可能不是最好的主意,如果需要进行更新。

移动的记录可能会有一些性能的考虑因素。但是,分配表可以做一些事情十分相似。

作为这是一个网络应用程序,我要假定有更多的读取比写道,和你想要的东西合理的快速解决冲突(i。e出的顺序审批)的结果相同的行为--最新更新之一,是使用。

两者的战略提议是相似的,他们都举行一行的每次改组,必须处理冲突等,唯一的区别是是否存储的数据在一个表中的两个。鉴于该方案,两个表格似乎是更好的解决方案业绩的原因。你也可以解决这一表格和视图的最近核准的变化,如果数据库支持它。

又一个想法是有三个表格。

  • 一个会是主要的表原始数据。
  • 第二会举行拟议的数据。
  • 第三将举行的历史数据。

这种方法让你有能力迅速和容易滚回来还给你一个审计线索,如果您需要它。

我认为第二种方式是更好的办法,仅仅是因为它扩展到更好的多个表格。此外,额外的处理,将是最小的,你可以建立一个索引表基于'批'位,你可以专注你的查询,无论是拉批准(将)或未经批准(用于审批)的条目。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top