0

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

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

例如:

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

有了这张表,我希望能够回答这个问题:“某某在‘某天’之前有什么电话号码”或“某某曾经改变过他们的名字吗?”

4

1 回答 1

0

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

然而,也有现有的版本控制系统的加密变体,例如GIST——它可能首先做你想做的事,但如果没有更多关于你想做的事情的详细信息,很难说。

于 2013-05-12T19:53:02.640 回答