Некоторые сотрудники и я вступили в дискуссию о наилучшем способе хранения исторических данных. В настоящее время для некоторых систем я использую отдельную таблицу для хранения исторических данных, и я сохраняю исходную таблицу для текущей активной записи. Итак, скажем, у меня есть таблица 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, но я хотел бы сохранить ответ общим и произвольным из любой СУБД.
Думаю, я понимаю, что вы говорите. Итак, что я сделал с моей таблицей FOO_Hist, действительно создала таблицу аудита. Вместо того, чтобы использовать триггер для вставки в таблицу аудита при обновлении, я просто запустил инструкцию в программе. Это верно? – Aaron
В значительной степени. Тем не менее, лучше вести такой журнал аудита с помощью триггеров; триггеры гарантируют, что любые изменения (включая исправления вручную) будут записаны в журналы аудита. Если у вас есть более 10-20 таблиц для аудита, вероятно, быстрее всего построить механизм запуска триггера. Если дисковый трафик для журналов аудита является проблемой, вы можете поместить таблицы журнала аудита на отдельный набор дисков. – ConcernedOfTunbridgeWells
Да, я 100% согласен с этим. Спасибо. – Aaron