Способы ведения истории данных в базе данных SQL Server 2008

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

Ответы на вопрос(2)

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

Изменение данных (MSDN)Основы сбора данных об изменениях (MSDN)Использование захвата данных измененийSql Server 2008: сбор данных изменений (CDC)

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

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

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

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

 Achilles03 окт. 2011 г., 02:03
Я использую отдельные таблицы + триггеры для управления историей записей и две другие таблицы для записи, когда и кто внес изменения в какую запись. +1 к триггерам!
 Chris06 окт. 2010 г., 22:30
Это кажется большим количеством дополнительных слоев для того, что может сделать триггер, чтобы заполнить ту же самую историю, которую вы упомянули
 utexaspunk07 окт. 2010 г., 01:20
Это правда; хотя, в зависимости от количества столбцов, может потребоваться и много триггеров. В любом случае программный сценарий может быть написан, поэтому сложность не должна быть большой проблемой. Оба метода имеют свои плюсы и минусы, и выбор правильного способа во многом зависит от ваших требований. Вот хорошая дискуссия:sqlserverplanet.com/design/...
Решение Вопроса

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

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

Временная база данных в ВикипедииПроектирование базы данных: архитектура на момент времениВременная база данных в качестве кандидата наук ТезисПост StackOverflow: зачем нам временные базы данных?

Ваш ответ на вопрос