如何在数据库中有效地版本化一组相关行

时间:2018-02-26 08:55:53

标签: java database oracle version-control

我有一个场景,我必须为数据库中的逻辑项组编写版本控制逻辑。可以将其比较为尝试维护包含某些文件的文件夹的版本。下面是包含ID 1000组的项目的表格。我必须在组级别执行版本控制,以便我能够返回到该组在过去某个时刻的特定状态< /强>

DB Optn   | ITEM_ID     GROUP_ID   ITEM_NAME           TEXT              CREATED_DATE
-----------------------------------------------------------------------------------------
Insert(1) |   1        1000       Note 1           <p>Now</p>            22-Feb-18  
Insert(2) |   2        1000       Note 2           <p>Next</p>           22-Feb-18      
Update(3) |   2        1000       Note 2 update    <p>Nowe Update</p>    22-Feb-18
Insert(4) |   3        1000       Note 3           <p>New Next</p>       22-Feb-18

我必须将所有这些行的版本维护为一个组。为此,我创建了上表的影子表,如下所示:

DB Opt    | ITEM_ID     GROUP_ID   ITEM_NAME        TEXT         CREATED_DATE  VERSION
------------------------------------------------------------------------------
Insert(1) |   1        1000       Note 1        <p>Now</p>         22-Feb-18     1
          |
Insert(1) |   1        1000       Note 1        <p>Now</p>         22-Feb-18     2
Insert(2) |   2        1000       Note 2        <p>Next</p>        22-Feb-18     2
          |
Insert(1) |   1        1000       Note 1        <p>Now</p>         22-Feb-18     3
Update(3) |   2        1000       Note 2 update <p>Nowe Update</p> 22-Feb-18     3
          |
Insert(1) |   1        1000       Note 1        <p>Now</p>         22-Feb-18     4
Update(3) |   2        1000       Note 2 update <p>Nowe Update</p> 22-Feb-18     4
Insert(4) |   3        1000       New Insert    <p>New Next</p>    22-Feb-18     4

这是我目前的做法。在这种情况下,我能够跟踪添加/更新到组ID 1000的每个项目。因此,当我想返回到特定版本时,我将该组中的项目的状态随时可用于该版本

这是一种有效的方法吗?我在这里看到的痛点是,即使更新组中的单个项目,我必须复制所有其他未更新的行以创建新版本。如果让我说我有10个项目用于组ID 1000并且我更新项目3,这将会产生一些问题。在这种情况下,将创建一个新版本,其中包含所有9个未更新的行和1个更新的行。

我可以修改我的影子表结构,以便不需要复制未编辑的项目,但仍然可以维持并返回到该组在特定时间的状态吗?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来你的团队变得越来越大,编辑的数量越来越多,那么这种方法会变得更加昂贵。

可能的替代方案可能涉及采用审计表&#39;的方法:

1)。向Items表添加一个单独的唯一标识列,并创建一个如下所示的Group-Version表:

GROUP_ID    VERSION    ITEM_ID

2)。当您插入或更新Items表时,您可以添加/删除旧的&amp; Group-Version表中该版本的组中的新项ID。