В течение долгого времени мы хотели создать систему управления делами, в которой никогда не теряется никакая история. Когда изменение сделано, мы хотим записать это изменение, но у нас есть возможность вернуться в любой момент времени и посмотреть, как выглядела запись. Я хотел задать этот вопрос сообществу Stack Overflow, чтобы узнать, как это можно сделать, существуют ли уже технологии для этого?
Способы ведения истории данных в базе данных SQL Server 2008
Ответы (2)
Да, эта технология определенно существует - это немного усилий, чтобы реализовать ее и сделать это правильно.
То, что вы ищете, называется временными базами данных - см. Некоторые ресурсы:
- Темпоральная база данных в Википедии
- Дизайн базы данных: точка in Time Architecture
- Темпоральная база данных в качестве доктора философии. диссертация
- StackOverflow post: зачем нам временные базы данных?
Я не уверен, как работает упомянутая временная база данных, такая как marc_s, но если вы используете SQL Server 2008 или новее, вы можете воспользоваться его встроенной функцией отслеживания измененных данных (CDC):
- Система отслеживания измененных данных (MSDN)
- Основы сбора измененных данных (MSDN)
- Использование отслеживания измененных данных
- Sql Server 2008: сбор измененных данных (CDC)
Включение CDC использует журнал транзакций репликации для хранения вставок, обновлений и удалений для таблицы и создает возвращающие табличное значение функции, которые позволяют извлекать строки на заданную дату / время или извлекать только изменения.
Однако вы не можете полагаться только на CDC, потому что ваш журнал транзакций станет неуправляемо большим и медленным. Итак, что вы делаете:
- включить CDC,
- создать таблицу истории, используя ту же схему, что и исходная таблица, но добавив еще пару столбцов для хранения информации о версии строки (очень похоже на медленно меняющееся измерение в реляционной базе данных OLAP) и
- создать задание, которое будет периодически опрашивать функции CDC на предмет изменений с момента последней загрузки и помещать их в таблицу истории
Затем вы можете использовать таблицу истории в своих запросах, присоединяясь к ней, как обычно, но с дополнительным предикатом (ями), чтобы получить запись «по состоянию на» в любую желаемую дату.