Способы ведения истории данных в базе данных SQL Server 2008 - PullRequest
9 голосов
/ 06 октября 2010

В течение долгого времени мы хотели создать систему управления делами, в которой история никогда не теряется.Когда изменение сделано, мы хотим записать это изменение, но у нас есть возможность вернуться к любому моменту времени и посмотреть, как выглядела запись.Я хотел задать этот вопрос сообществу Stack Overflow, чтобы узнать, как это можно сделать, существуют ли уже технологии для достижения этой цели?

Ответы [ 2 ]

8 голосов
/ 06 октября 2010

Да, эта технология определенно существует - это попытка реализовать ее и сделать это правильно.

То, что вы ищете, называется временные базы данных - см. Некоторые ресурсы:

3 голосов
/ 07 октября 2010

Я не уверен, как работает временная база данных, подобная упомянутой marc_s, но если вы используете SQL Server 2008 или более позднюю версию, вы можете воспользоваться его встроенной функциональностью захвата данных (CDC):

Включение CDC использует журнал транзакций репликации для хранения вставок, обновлений и удаленийдля таблицы и создает функции с табличными значениями, которые позволяют извлекать строки по состоянию на заданную дату / время или извлекать только изменения.

Вы не можете полагаться только на CDC, посколькужурнал транзакций станет неуправляемо большим и медленным.Итак, что вы делаете:

  • включите CDC,
  • создайте таблицу истории, используя ту же схему, что и исходная таблица, но добавив еще пару столбцов для хранения информации о версии строки (значительнокак медленно изменяющееся измерение в реляционной базе данных OLAP) и
  • создают задание, которое будет периодически опрашивать функции CDC на наличие изменений с момента его последней загрузки и помещать их в таблицу истории

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

...