使用数据库编写自己的版本控制系统?

Writing your own version control system using a database?

我想知道解决这个问题的最佳方法:

  1. 用户写了一篇文章并按保存。 (保存到数据库)
  2. 用户编辑了上一篇文章并按保存。 (比如 git 提交)
  3. 重复

在用户编辑文章的每个阶段,我想向用户展示每次提交期间所做的更改(增减)。

我想到了两种方法:

  1. 将文章内容的所有迭代保存在数据库中。也就是为每次保存创建一个新行,其中包含文章的全部内容。然后,通过检查差异来比较后端的文件。

    +-----------+---------+----------------------------+
    | ArticleID | Version |            Body            |
    +-----------+---------+----------------------------+
    |         1 |       3 | This is a random article.  |
    |         1 |       2 | This is a random article   |
    |         1 |       1 | a random article           |
    +-----------+---------+----------------------------+
    
  2. 或者像下面这样通过存储来记录对文章的所有更改,然后当用户想要查看版本 1 和版本 2 之间的差异时,获取版本 1 并附加所做的更改

    +-----------+---------+-------------------+-------------------+---+
    | ArticleID | Version | CharacterPosition |         +         | - |
    +-----------+---------+-------------------+-------------------+---+
    |         1 |       3 |                24 | .                 |   |
    |         1 |       2 |                 0 | This is           |   |
    |         1 |       1 |                 0 | a random article  |   |
    +-----------+---------+-------------------+-------------------+---+
    

我会建议选项 1。如果您使用选项 2,当有人从不同位置添加或删除字符时,您会遇到麻烦。此外,如果您想查看三个版本之间的区别,这会给编码带来一些困难。