Деякі співробітники та я вступили в дискусію щодо найкращого способу зберігання історичних даних. В даний час для деяких систем я використовую окрему таблицю для зберігання історичних даних і зберігаю оригінальну таблицю для поточного активного запису. Отже, скажімо, у мене таблиця 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, але я хотів би зберегти відповідь загальною та довільною для будь-якої СУБД.