Шаблоны для реализации полевого отслеживания изменений

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

В базе данных я реализовал это как единственную таблицу FieldChanges со следующими полями:

  • TableName
  • FieldName
  • RecordId
  • DateOfChange
  • ChangedBy
  • IntValue
  • TextValue
  • DateTimeValue
  • BoolValue

Сохраняющие изменения sproc в объекте определяют для каждого поля, было ли оно изменено и вставляет запись в FieldChanges, если оно имеет: если тип измененного поля int, это записывает его в IntValue поле в FieldChanges таблица, и т.д.

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

Это работает вполне хорошо, но немного неуклюже. Может кто-либо еще, кто реализовал схожую функциональность, предлагают лучший подход, и почему они думают, что это лучше?

Мне действительно было бы интересно - спасибо.

David

6
задан von v. 15 April 2013 в 05:06
поделиться

3 ответа

Корпоративный шаблон для этого состоит в том, чтобы иметь теневую таблицу поправок для каждой таблицы, которую вы создаете, чтобы отображать остаточное изображение (и, возможно, изображение перед) для всех столбцов. Вам потребуются:

  • скрипта для создать таблицу поправок
  • , триггеры для их заполнения
  • и поддерживать вышеуказанное, когда таблица изменяется с течением времени.

Но для хорошо налаженного предприятия все это уже должно быть на месте.

Моя организация использует это только для следующих целей:

  • Аудит базы данных и поддержка для определения того, что произошло вручную (с помощью SQL).
  • Enterprise Data Warehouse (SAS) забирает все дельты из производственных систем для анализа.

Мы создаем разные таблицы, если они нужны для самих операционных систем.

1
ответ дан 17 December 2019 в 00:06
поделиться

Я решаю эту проблему путем управления версиями. Одна версия - одна строка таблицы. Последняя версия - строка с самой большой датой последнего обновления.

0
ответ дан 17 December 2019 в 00:06
поделиться

Просто создайте триггер, и пусть он автоматически отслеживает изменения и записывает их в вашу таблицу аудита.

0
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: