| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .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, спасибо, отличная статья. Выходит что описанный мной способ - худший из тех, что там рассмотрен. Есть над чем задуматься... |