Snay
@Snay

БД — сравнение предыдущих версий таблиц с текущей

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

Подскажите, пожалуйста, как лучше реализовать данное чудо.
Пока было 2 варианта: отдельная таблица на каждый день (месяц минимум) и, например, вычитать одну из другой. Или триггеры при апдейте, которые вполне вариант, но как восстановить состояние всей таблицы на прошедшую дату?

Очень интересуют как общие советы по архитектуре, так и конкретные технологии, которые оптимальнее использовать.
Спасибо.
  • Вопрос задан
  • 2794 просмотра
Пригласить эксперта
Ответы на вопрос 5
Я обычно такие штуки храню в одной таблице, только добавляю ещё одно поле с номером версии.
Ответ написан
Комментировать
strib
@strib
Версионность надо делать нормальную.
Способов организации может быть несколько. Например для каждого объекта указывать время жизни.
Ну или купить Oracle, в 11 есть встроенная версионность.

Есть нечно вроде вводной части, не все идеально но более или менее habrahabr.ru/post/101544/

И в сети валом информации по версионности данных.
Ответ написан
Комментировать
@egorinsk
> Подскажите, пожалуйста, как лучше реализовать данное чудо.

Конечно, же написать самому. Для хранения можно использовать, например, систему ревизий (как в википедии) (1 таблица хранит актуальные значения, другая, архивная, все предыдущие ревизии записей).
Ответ написан
Комментировать
@Ura78
Советую воспользоваться библиотекой Database Comparer VCL
Ответ написан
Комментировать
kuzemchik
@kuzemchik
Если нагрузка не большая, триггером создавать копию + умное представление.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы