использовать триггеры для хранения истории реляционных таблиц - PullRequest
0 голосов
/ 06 июля 2011

говорят, что у меня 6 таблиц.

  1. Рабочая станция
  2. Рабочая станция_CL
  3. Местоположение
  4. Location_CL
  5. Особенности
  6. Features_CL

В настоящее время я использую триггеры для вставки в «_CL» версию каждой таблицы с дополнительным полем, которое указывает, было ли изменение «UPDATE», «INSERT» или «УДАЛИТЬ ".

таблица рабочей станции отслеживает пользователя "ified_by".если пользователь обновляет местоположение объекта «Рабочая станция», обновляется таблица «Расположение», а также таблица «Рабочая станция».единственная модификация таблицы «Рабочая станция» - это поле «updated_by», чтобы я знал, кто внес изменение.

Проблема, с которой я сталкиваюсь, заключается в том, что я думаю о получении отчета об аудите.Как я буду связывать записи в "Location_CL" с записями в "Workstation_CL", оба заполняются отдельными триггерами.

каким-то образом моя часть вопроса была стерта.извините за это.

Вопрос: как я могу получить некоторый тип уникального идентификатора, чтобы иметь и в «Workstation_CL», и в «Location_CL», чтобы я мог идентифицировать каждую ревизию?например, когда я извлекаю все записи из «Location_CL» и вижу все изменения местоположения, вытаскивая имя пользователя из «Workstation_CL», который внес изменение местоположения?

Ответы [ 3 ]

0 голосов
/ 06 июля 2011

Вам нужно 2, может быть, 3 столбца в каждой таблице аудита.

1) Отметка времени, чтобы вы знали, когда были внесены изменения.
2) Пользователь изменился, чтобы вы могли отслеживать, кто внес изменения- Я предполагаю, что местоположение может меняться независимо от рабочей станции.3) Вам также может понадобиться идентификатор для транзакции.Я думаю, вы можете получить идентификатор из БД, хотя я не уверен.

Я не думаю, что вы можете иметь эффективный отчет без отметок времени и пользователей, и я не думаю, что у вас есть только пользователь на одной таблице.

0 голосов
/ 11 июля 2011

Во время события триггера я смог выполнить следующее:

SELECT @trans_id=transaction_id FROM sys.dm_tran_current_transaction

, что дает мне идентификатор транзакции для текущей операции.

с этим я могу вставитьэто в соответствующую таблицу _CL и затем выполнить выборки, которые будут соответствовать идентификаторам auto-gen.

0 голосов
/ 06 июля 2011

Дайте каждой ревизии GUID, сгенерированный триггером.Заполните поле (RevisionId) в обеих таблицах значением.

...