我目前正在开发一个简单的修订系统,它可以存储单个文件的多个版本,到目前为止工作正常。
表结构如下(为简洁起见,删除了过时的列):
file_id file_revision file_parent file_name
--------------------------------------------------------
1 1 0 foo.jpg
2 2 1 foorevised.jpg
3 3 1 anotherrevision.jpg
其中:
file_id
是主键,自动递增file_revision
存储修订号,默认为1
,当它是第一个时file_parent
是修订版的顶级父级,首次默认为0
。file_name
是文件名。问题:
非常感谢任何指针。提前谢谢。
答案 0 :(得分:4)
为了检索,最有效的方法是添加一个像is_latest这样的列,你需要提前填充,然后{@ 1}}当你想要获取最新版本的文件1.显然这会更新然而,这个表格更复杂。
另一种方法是将最新版本的文件存储在一个表中,将历史版本存储在另一个表中。如果您主要想要选择最新版本的所有文件,即使is_latest被编入索引,select * from table where file_id=1 and is_latest=true
也可能相当于全表扫描。如果最新的行都在一个表中,则数据库可以在顺序IO中全部读取它们,而不必另外1)通过表执行大量搜索以找到它所需的记录或2)扫描整个表丢弃大旧记录沿途的数据量。
假设您不想更改现有的表设计,您想要做的就是选择groupwise最大值,有关在mysql中执行此操作的几种不同方法,请参阅this article。
答案 1 :(得分:1)
file_id file_revised file_name Time_Stamp
-----------------------------------------------------------------
1 1 foo.jpg insert_time
2 1 foorevised.jpg insert_time
3 1 anotherrevision.jpg insert_time
然后我会对这样的查询进行修改:
SELECT * WHERE file_revision = 1 ORDER BY Time_Stamp GROUP BY file_revision
或者此类查询的任何数量的变化,即限制1或按file_id排序最高也将是最新的等等。