2015-03-12 3 views
2

У меня есть список статей и их исправлений. В этом случае важны только два правила:Ведение учетных записей

(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' 

Я не верю, что проект нуждается в Временная база данных только для решения этой проблемы. Это единственная таблица, которая нуждается в управлении версиями, и сохраненный контент слишком мал (около 2 КБ на запись).

Кажется, что эта ситуация столкнулась со многими хорошими CMS и Wikis (такими как MediaWiki или Wordpress). Любые советы о том, как они решаются, а также преимущества и недостатки методов, используемых в этих проектах?

+0

используйте отдельную таблицу_истории статьи для хранения изменений. См. Hibernate Envers –

ответ

0

Mediawiki имеет отдельные таблицы для page и revision, и таблица страниц хранит rev_id последнего пересмотра в page_latest области.

Смежные вопросы