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