Некоторые сотрудники и я начали дискуссию о том, как лучше хранить исторические данные. В настоящее время для некоторых систем я использую отдельную таблицу для хранения исторических данных и сохраняю исходную таблицу для текущей активной записи. Итак, допустим, у меня есть таблица FOO. В моей системе все активные записи будут отправляться в FOO, а все исторические записи - в FOO_Hist. Многие различные поля в FOO могут быть обновлены пользователем, поэтому я хочу вести точный отчет обо всем обновленном. FOO_Hist содержит те же поля, что и FOO, за исключением автоматически увеличивающегося HIST_ID. Каждый раз , когда FOO обновляется, я выполняю оператор вставки в FOO_Hist подобное: insert into FOO_HIST select * from FOO where id = @id
.
Мой коллега говорит, что это плохой дизайн, потому что у меня не должно быть точной копии таблицы по историческим причинам, и я должен просто вставить другую запись в активную таблицу с флагом, указывающим, что это для исторических целей.
Существует ли стандарт для работы с хранилищем исторических данных? Мне кажется, что я не хочу загромождать свои активные записи всеми своими историческими записями в одной таблице, учитывая, что это может быть более миллиона записей (я думаю, в долгосрочной перспективе).
Как вы или ваша компания справляетесь с этим?
Я использую MS SQL Server 2008, но я бы хотел, чтобы ответ был общим и произвольным для любой СУБД.