Управление версиями данных в SQL Server, чтобы пользователь мог выполнить определенный разрез данных - PullRequest
5 голосов
/ 07 марта 2011

У меня есть требование, чтобы на веб-сайте, поддерживаемом SQL Server, который по сути является крупным CRUD-приложением, пользователь мог иметь возможность «вернуться назад во времени» и иметь возможность экспортировать данные, как это было в данный момент времени .

Мой вопрос: какова лучшая стратегия для этой проблемы? Могу ли я использовать системный подход и применять его ко всем таблицам?

Ответы [ 4 ]

5 голосов
/ 07 марта 2011

В зависимости от того, что именно вам нужно, это может быть относительно просто или ад.

Легко: создайте таблицу истории для каждой таблицы, скопируйте туда данные перед обновлением или после вставки / обновления (т. Е. Новые вещи тоже есть) Никогда не удаляйте из исходной таблицы, делайте логические удаления.

Жесткий: существует версия FDB, подсчитывающая каждое изменение, каждый элемент данных соотносится с началом и концом. Это требует очень сложного искажения первичного ключа.

1 голос
/ 07 марта 2011

Просто добавьте небольшой комментарий к предыдущим ответам.Если вам нужно вернуться ко всем пользователям, вы можете использовать снимки .

0 голосов
/ 07 марта 2011

Реализация, на которую вы можете посмотреть: Team Foundation Server . Он имеет возможность выполнять исторические запросы (используя ключевое слово WIQL ASOF). Бэкэнд - это SQL Server, поэтому там могут быть некоторые подсказки.

0 голосов
/ 07 марта 2011

Самое простое решение - сохранить копию каждой строки всякий раз, когда она изменяется. Это легче всего сделать с помощью триггера. Тогда ваш пользовательский интерфейс должен предоставить возможности поиска, чтобы вернуться и найти данные.

Это приводит к взрыву данных, который усугубляется при частом обновлении таблиц, поэтому следующим шагом обычно является некая очистка старых данных на основе данных.

...