如何设计表格以快速版本化文本数据?

Dee*_*ons 6 sql-server-2005 database-design sql-server version-control

我在这里谈论的版本不是版本控制系统。就像在 SO 中一样,我得到了一些可以进行版本控制的文本数据(将它们与问题进行比较)(在编辑、保存、回滚的意义上)。每次编辑、更新、保存的内容都将根据最终用户的选项保存为新版本。我应该如何为这种任务设计一张桌子?

当前实施

id pk auto increment
content
parentid defaults to 0
version  defaults to 0
Run Code Online (Sandbox Code Playgroud)

样本记录

id     content        parentid        version
1      Hello World        0              0
2      Hello Doggy        1              1
3      Hello Kitty        1              2
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,父 ID 等于现有 ID 的每条记录都将保存在增量版本中(实际上是在服务器端代码中计算的)。显示在 UI 中,如下所示

1.Hello World
    -Hello Doggy(Version1)
    -Hello Kitty(Version2)
Run Code Online (Sandbox Code Playgroud)

其中每个都显示为链接,以便可以进行进一步的编辑。事情像预期的一样没有问题,但我们想改进这一点,我认为最好从桌子设计开始。

gbn*_*gbn 10

您已经有一个选择:将其保存在一张表中
这是一个“缓慢变化的维度”

另一个选项是将“当前”和“以前”版本拆分为 2 个表。当您更新当前表时,触发器可以填充“上一个”表。或更新..输出。

您可以通过两种方式查询此数据:

  • 合并为一个记录集,客户端代码将其拆分
  • 两个记录集,一个当前的 + 一个以前的。这也可以在存储过程中完成。

我已经实现了两者:这取决于访问模式和使用情况。

如果我一口气阅读所有版本或加入它,那么一张桌子。如果“以前的”数据仅按需提供,则为表格。

在您的情况下,您可以推迟以前的版本,直到用户单击加载它吗?实际上很少需要以前的版本吗?如果是,那么我建议 2 张桌子。这样,您只需为当前版本移动和渲染较少的数据。