数据库版本控制

Rag*_*geZ 3 database database-design version

我做了很少的项目(CMS和EC系统),需要对一些数据进行版本控制.

通常我会带有那种架构

+--------------+
+ foobar       +
+--------------+
+ foobar_id    +
+ version      +
+--------------+
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我想知道是否有更好的办法.该解决方案的主要问题是您必须始终使用子查询来获取最新版本.

即:

SELECT * FROM foobar WHERE foobar_id = 2 and version = (SELECT MAX(version) FROM foobar f2 WHERE f2 = 2)
Run Code Online (Sandbox Code Playgroud)

这使得大多数查询更复杂并且还具有一些性能缺陷.

因此,如果您分享创建版本化表格的经验以及每种方法的优点和缺点,那将是很好的.

谢谢

Jim*_*ner 5

我更喜欢将历史数据放在另一个表中.我会制作foobar_history或类似的东西,并制作一个FK到foobar_id.这将阻止您必须一起使用子查询.这样做的另一个好处是不会使用大量历史数据污染主数据表,您可能不希望在99%的时间内访问它.

您可能希望触发更新此数据,因为它需要您将当前数据复制到_history然后执行更新.