使用MySQL创建简单修订系统的最佳方法是什么?

Aro*_*eel 8 mysql database revision database-design

我目前正在开发一个简单的修订系统,使我能够存储单个文件的多个版本,到目前为止工作正常.

表结构如下(为简洁起见,删除了过时的列):

file_id     file_revision     file_parent      file_name
--------------------------------------------------------
1           1                 0                foo.jpg
2           2                 1                foorevised.jpg                 
3           3                 1                anotherrevision.jpg
Run Code Online (Sandbox Code Playgroud)

哪里:

  • file_id 是主键,自动递增
  • file_revision存储修订号,默认为1第一个
  • file_parent是修订版的顶级父级,默认为0第一级.
  • file_name 是文件名.

问题:

  • 最好使用单个查询我想要检索所有文件...
  • 但只有每个文件的最新版本......
  • ...当只存储一个版本(原始版本)时,应该检索这个版本.

任何指针都非常感谢.提前致谢.

ʞɔı*_*ɔıu 5

为了检索,最有效的方法是添加一个像 is_latest 这样的列,您需要提前填充它,然后select * from table where file_id=1 and is_latest=true当您想要获取文件 1 的最新版本时。显然,这会使更新此表变得更加复杂。

另一种方法是将文件的最新版本存储在一个表中,并将历史版本存储在另一个表中。如果您主要想选择所有最新版本的文件,select * from table where is_latest=true即使 is_latest 已编入索引,也可能相当于全表扫描。如果最新的行都在一个表中,则数据库可以在顺序 IO 中将它们全部读取出来,而不必 1) 通过该表进行大量查找以仅找到它需要的记录,或者 2) 扫描整个表,丢弃大的旧记录沿途的数据量。

假设你不想改变现有的表设计,你想做的就是选择分组最大值,看这篇文章了解在mysql中的几种不同方法。