Если бы у меня было 1 или 2 таблицы истории, я бы сделал это именно так, как предложил Туинстул. Но если бы у вас были десятки таблиц для этого, я бы больше подошел к решению, описанному Zendar. Причина в этом.
Как вы отвечаете на такие вопросы, как,
Что изменилось со вчерашнего дня, когда все было хорошо?
Изменил ли пользователь SMITHG какие-либо изменения?
Для этих вопросов требуется один запрос на таблицу, будь то отдельная таблица _hist или раздел внутри таблицы. Неважно, это огромный список запросов. Если у вас есть центральный стол, который выглядит так, то это кусок пирога.
table_name, Column_name, PK, Before_value, After_value, User, timestamp
Вставки имеют только после значений,
Удаляет только перед значениями,
Обновление имеет оба, но только для столбцов, которые изменились.
Некоторые вариации
Вы можете включить столбец для I / U / D, если вы предпочитаете
Вы можете исключить значения столбцов для вставок и просто записать PK и I, поскольку правильные значения все еще находятся в таблице.
Поскольку это Oracle, вы можете разбить на имя_сталицы, так что, по сути, у вас действительно есть одна «таблица» исторических данных на реальную таблицу.
Вы можете легко ответить на вышеупомянутые вопросы, которые, я считаю, являются наиболее часто задаваемыми вопросами. И он обрабатывает каждый вопрос, на который вы можете ответить с помощью разделов или таблиц _hist.