我目前正在开发一个简单的修订系统,该系统使我能够存储单个文件的多个版本,到目前为止效果很好。
表结构如下(为简洁起见删除了过时的列):
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
为文件名。
问题:
- 最好使用单个查询来检索所有文件...
- 但只有每个文件的最新版本...
- ...当只存储一个修订版(原始)时,应检索此修订版。
非常感谢任何指点。提前致谢。
最佳答案
为了检索,最有效的方法是添加一个像 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) 扫描整个表,丢弃大量的记录旧记录的大量数据。
假设您不想更改现有的表设计,您要做的是选择分组最大值,请参阅 this article了解在 mysql 中执行此操作的几种不同方法。
关于mysql - 使用 MySQL 创建简单修订系统的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638634/