Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Версионность данных и модерация


Автор: elbjarn 2.7.2009, 19:55
Доброго времени суток.
Задача:
Есть некоторый набор взаимосвязанных сущностей. К примеру, таблица GAME (GAME_ID, GAME_TITLE, GAME_TOURNAMENTID) и TOURNAMENT (TOURNAMENT_ID, TOURNAMENT_TITLE). Данные могут меняться как администратором, так и пользователями. Например, пользователь может зайти и создать игру в турнире.
Требуется: 
1) обеспечить информацию о том, как менялись сущности (т.е. поддерживать версионность). К примеру:
создано: 1 мая 2000 года - ID: 1 TITLE: Игра1 пользователем N
изменено: 1 июня 2000 года - ID: 1 TITLE: Игра1111 пользователем N
удалено: 1 июня 2000 года - ID: 1 пользователем N
2) обеспечить модерацию данных. Администратор заходит в систему и видит: сущность такая-то была изменена, утвердить/отклонить?

Вопрос к опытным разработчикам. Поделитесь, как вы реализовывали эту схему, какие приемы использовали. 
Я использовал решение такое: в каждую сущность, требующую модерации/версионности, добавил поля, отвечающие за статус записи, ссылку на предыдущую версию, ссылку на первую версию, имя пользователя, вызвавшего изменение последнего статуса, а также системное время.
Возникли проблемы (не принципиальные, но геморройные): нарушается общая схема работы с данными по ID (не может быть строк с одинаковым ID, но при этом необходимо знать что несколько строк с разным айдишником относятся к одной и той же сущности, и тд). Приходится выбирать данные то по ID, то по полю, храняющему ссылку на первую версию и с определенным статусом, и пр.
В такой схеме непонятно еще и принципиальный вопрос: допустим есть строка со статусом = 1 (актуальна). Пришел пользователь, отредактировал, создалась новая строка с отредактированным значением и статусом, к примеру, = 7 (ждет модерации). Пришел администратор, ему высветились все данные со статусом 7, он их утвердил. Что должно произойти: замена строки со статусом 1 или замена статуса этой строки на 3 (удален), а строки с 7-м статусом - на статус 1? Вопрос принципиальный, потому что в этом случае меняется айдишник у объекта...

Такой вот запутанный пост получился.
Жду ваших комментариев.. )

если кто-то кинет ссылки на литературу по теме, буду крайне признателен!

Автор: Idsa 2.7.2009, 20:20
elbjarn, http://www.rsdn.ru/article/db/dbhistory.xml

Автор: elbjarn 2.7.2009, 21:31
Idsa, спасибо, отличная статья. Выходит что описанный мной способ - худший из тех, что там рассмотрен. Есть над чем задуматься...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)