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

标签 mysql database database-design revision

我目前正在开发一个简单的修订系统,该系统使我能够存储单个文件的多个版本,到目前为止效果很好。

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

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/

相关文章:

php - 如何显示mysql数据库中的图像?

java - 从普通 Hibernate 配置迁移到 Hibernate Annotations - 数据库也需要 FK

database-design - FaceBook搜索:它的技术要求和创新功能有哪些值得关注?

mysql - 共享 SugarCRM 数据库的大问题

sql - 您如何知道 SQL 数据库何时需要更多规范化?

php - MySQL Select 查询来拓宽表优化

mysql - 如何自定义MySQL ORDER BY

java - 运行 Java 和 SQL 数据库连接时出现错误

数据库设计-与关系和 FK 作斗争

mongodb - 在 MongoDB 中,一个大的 $​​or 搜索是否比多个单个搜索更快?