我该如何处理数据库中的数据副本?

时间:2013-08-29 14:04:01

标签: sql database database-design schema database-schema

如果用户在数据库中有几百条记录,并且想要制作草稿,他们可以获取所有当前数据并进行一些更改并将其保存为草稿可能会保持良好状态,我该怎么办?两份?

我应该复制同一个表格中的所有数据并将其标记为草稿吗?

或仅复制更改?如果不存在变化,则使用“非草稿”数据?

用户应该能够进行更改然后仍然返回实时并在那里进行更改,而不影响草稿?

2 个答案:

答案 0 :(得分:2)

只需在受影响的表格中引入版本字段即可。

内容管理系统(CMS)已经这样做了。例如,您可以创建一个博客文章,它的版本为1.然后进行更改,即可获得版本2,然后开启。

您显然最终会存储更多数据。但是,一个很好的好处是您可以轻松编写查询来加载数据的版本(或快照)。

作为惯例,您始终可以将最高版本号设为“活动”版本。

答案 1 :(得分:0)

您可以使用BEGIN TRANS,COMMIT和ROLLBACK语句,也可以创建存储过程/代码段,这意味着用户所做的任何修改都会放入临时表中,直到它们准备好投入生产。

如果要进行大量更改,最好使用临时表,因为使用COMMIT等会导致锁定实时数据以供其他用途。

如果上述内容对您没有任何意义,本文可能有所帮助:http://www.sqlteam.com/article/temporary-tables

编辑 - 你可以“动态”创建新表(即不是临时的,但是完整的sql表),并将它们命名为有意义的东西。例如,用户intials,后跟原始表名,后跟时间戳。

然后,您可以在很长一段时间内以编程方式创建,修改和删除这些表,并与Live表进行比较。如果数据库增长到很大的数量,您需要跟踪正在创建的表的数量。

然后唯一的主要问题是将更改重新放回实时数据中。例如,如果某人将数据剪切到新表中,然后3周后决定在进行更改后将其发送到实时。在这种情况下,实时数据可能会发生变化,并可能取代用户提交的更改。

你可以通过一些创意编码解决这个问题。有很多方法可以解决这个问题,所以如果你在下一步遇到困难,你可能想要开始一个新问题。希望这至少可以为你提供一些灵感。