我如何'版本'SQLite表?

时间:2013-05-12 19:30:31

标签: c++ c sqlite

我有一个表格,它有一些规律性的更新,我希望能够对它进行版本化,以便我可以随时回滚到以前的版本。我想在抽象级别执行此操作,以便我不对数据本身进行版本控制(即,将版本控制作为表的一部分),而是将事务日志存储在另一个表中。这样做的最佳方式是什么?

可能的解决方案:为onInsert,onUpdate,onDelete等添加一个触发器,并让那些在其他表上执行相关的插入,但看起来像sqlite已经有一个事务日志,看起来似乎更多的工作:如果只有我可以某种方式查询日志(并且不要删除它)。

例如:

CREATE TABLE Contacts(
    id     INT PRIMARY KEY,
    first  VARCHAR,
    middle VARCHAR,
    last   VARCHAR,
    phone  VARCHAR,
    date   TIMESTAMP
);

有了这张桌子,我希望能够回答这个问题:“在'某一天'之前,有什么电话号码已经这么做了”或“是否曾经如此改变他们的名字?”

1 个答案:

答案 0 :(得分:0)

听起来您希望将DATA存储为不同的版本 - 例如,您可以拥有一个包含文件名(或某些类似标识符)和版本号的表,以及包含每个版本的内容的第二个表。 “文件”(基于某些ID)。更新文件后,将再次存储该文件。如果你想像一个正确的版本系统那样做,你可以在第二个表中存储先前和新数据之间的差异[或最新文件以及与文件旧版本的差异,或者对该主题的一些变化 - 有很多开源版本控制系统,所有这些系统都有与实际文件数据存储方式略有不同的解决方案。

但是,也存在版本控制系统的加密变体,例如GIST - 它们可能正在做你想要的东西,但没有关于你想要做什么的更多细节,这很难说。