Как хранить историю изменений данных? - PullRequest
4 голосов
/ 28 февраля 2012

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

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

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

1 голос
/ 28 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...