我有一个文章列表和它的修订版。在这种情况下,只有两条规则很重要:
(i)当有人要求对一篇文章进行具体修改时,应该提交。
(ii)当有人请求一篇文章时,只需告知文章标识符,就应交付该文章的最新修订版。
为了获得最新修订的文章列表,我们使用以下视图:
CREATE OR REPLACE VIEW `only_articles` AS
SELECT *
FROM article AS a
WHERE a.revision = (
SELECT MAX(ma.revision) AS max_revision
FROM article AS ma
WHERE ma.id = a.id
);
有什么方法可以优化这个查询吗?有什么方法可以避免子查询吗?有没有更好的方法来存储这些修订?
这是表格结构(简化):
CREATE TABLE `article` (
`ai_id` int(11) NOT NULL AUTO_INCREMENT,
`id` int(11) NOT NULL,
`revision` int(11) NOT NULL,
`title` varchar(45) NOT NULL,
PRIMARY KEY (`ai_id`),
UNIQUE KEY `ID_VERSION` (`id`,`revision`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
以下是一些数据:
ai_id id revision title
1 1 1 'Text one'
2 1 2 'Text two'
3 1 3 'Text three'
4 2 1 'Another Article'
5 2 2 '2nd revision of another article'
预期输出:
ai_id id revision title
3 1 3 'Text three'
5 2 2 '2nd revision of another article'
我不相信这个项目需要一个时态数据库来解决这个问题。这是唯一需要版本控制的表,而且存储的内容太小(每条记录大约2KB )。
似乎许多优秀的内容管理系统和维基(如MediaWiki或Wordpress)都遇到过这种情况。关于它们是如何解决的,以及在这些项目中使用的方法的优缺点,有什么建议吗?
https://stackoverflow.com/questions/29016551
复制相似问题