Способ реализации контрольного журнала на строку - PullRequest
1 голос
/ 18 мая 2011

Я хочу добавить два столбца ко всем моим таблицам [Время создания] и [Время изменения], чтобы записать контрольный журнал. В будущем эти поля могут использоваться при разбиении таблицы. Пожалуйста, предложите, как лучше всего это сделать? Разумно ли это делать через триггеры в БД или обновлять эти значения с помощью кода. Мы используем Hibernate API для общения с Oracle 11g.

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Поскольку вы уже используете Hibernate, взгляните на Hibernate Envers :

Цель проекта Envers - обеспечить легкий аудит / управление версиями постоянных классов.Все, что вам нужно сделать, это аннотировать ваш постоянный класс или некоторые его свойства, которые вы хотите проверять, с помощью @Audited.Для каждого проверяемого объекта будет создана таблица, в которой будет храниться история изменений, внесенных в объект.Затем вы можете без особых усилий извлекать и запрашивать исторические данные.

Это более тяжелое решение, но дает вашему приложению полный контроль.

В качестве альтернативы, вы можете сделать это через Oracle PL/ SQL триггеры, но ваше приложение будет иметь ограниченный контроль над этим.

0 голосов
/ 18 мая 2011

Есть плюсы и минусы.

Лично я использую триггеры.

Это приводит к интересному крайнему случаю, когда у вас есть основная таблица и множество связанных таблиц, чей контрольный журнал вы хотите поделиться. Скажем, заказы + строки заказа + [множество других связанных таблиц], которые относятся к заказам. В этом случае интересная часть данных для аудита - это заказ, поэтому заказы должны содержать подробности, связанные с аудитом. Если у вас есть триггер, который срабатывает при каждой вставке / обновлении / удалении строк заказа + [множество других связанных таблиц], то производительность в конечном итоге сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...