2012-02-28 2 views
4

Мне нужно сохранить историю изменений данных в базе данных. Например, некоторое время некоторые пользователи изменяют некоторые свойства некоторых данных. Ожидаемый результат мы можем получить историю изменений для одного данных какКак сохранить историю изменений данных?

Tom changed title to 'Title one;' 
James changed name to 'New name' 
Steve added new_tag 'tag23' 

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

Любая хорошая идея для достижения этой цели? Не ограничивается традиционной базой отношений.

+0

В Oracle триггеры хороши для этого - не уверен, что это то же самое в MySQL или SQLServer - вы хотите сделать это программным способом или используя собственную технологию баз данных? Использование собственной технологии баз данных будет самым быстрым и, пожалуй, самым простым способом отслеживания изменений данных. –

+0

Спасибо, но я не люблю использовать собственную технологию баз данных. – donnior

ответ

2

Это обычно называют таблицами аудита. Как я обычно это понимаю, это использование триггеров в базе данных. Для каждой вставки/обновления из исходной таблицы триггер копирует данные в другую таблицу с именем той же таблицы с присоединенным к ней _AUDIT (соглашение об именах не имеет значения, это именно то, что я использую). ORACLE предоставляет вам что-то, называемое журнальными таблицами. Используя конструктор ORACLE (или вручную), вы можете добиться того же, и разработчики часто добавляют _JN в конец таблицы журнала/аудита. Однако это работает так же, как триггеры в исходной таблице, копирующие данные в таблицу аудита.

EDIT: Следует также отметить, что вы можете создать новую отдельную схему для управления только вашими таблицами аудита или вы можете сохранить их в своей схеме с помощью исходных таблиц. Я делаю оба, это просто зависит от ситуации.

1

я написал статью о различных вариантах: http://blog.schauderhaft.de/2009/11/29/versioned-data/

Если вы не привязаны к реляционной базе данных, есть вещи, называемые «добавить только» базы данных (я думаю), которые никогда не меняются данные, но только добавить новый версии. Для вашего случая это звучит как идеальный. К сожалению, я не знаю никакой реализации.

+0

Я сделал что-то подобное с помощью SQLServer. Это может быть отличным решением, и, как говорит Йенс, вы только добавляете данные таблицы. Это, по существу, таблица журналов и исходная таблица в одном. Следует отметить, однако, что ваши данные таблицы будут расти намного быстрее, чем если бы вы отделили источник от аудита и потенциально могли бы вызвать проблемы с производительностью. – northpole

+0

Я думаю, что CouchDB - это только добавленная база данных – velop

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