我有一个场景,我必须为数据库中的逻辑项组编写版本控制逻辑。可以将其比较为尝试维护包含某些文件的文件夹的版本。下面是包含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个更新的行。
我可以修改我的影子表结构,以便不需要复制未编辑的项目,但仍然可以维持并返回到该组在特定时间的状态吗?提前感谢您的帮助。
答案 0 :(得分:0)
看起来你的团队变得越来越大,编辑的数量越来越多,那么这种方法会变得更加昂贵。
可能的替代方案可能涉及采用审计表&#39;的方法:
1)。向Items表添加一个单独的唯一标识列,并创建一个如下所示的Group-Version表:
GROUP_ID VERSION ITEM_ID
2)。当您插入或更新Items表时,您可以添加/删除旧的&amp; Group-Version表中该版本的组中的新项ID。