Для одного из моих недавних проектов я должен был реализовать полевое отслеживание изменений. Таким образом каждый раз, когда пользователь изменил значение поля, изменение было зарегистрировано для разрешения полного аудита изменений.
В базе данных я реализовал это как единственную таблицу FieldChanges
со следующими полями:
Сохраняющие изменения sproc в объекте определяют для каждого поля, было ли оно изменено и вставляет запись в FieldChanges, если оно имеет: если тип измененного поля int
, это записывает его в IntValue
поле в FieldChanges
таблица, и т.д.
Это означает, что для любого поля в любой таблице с любым значением идентификатора, я могу запросить таблицу FieldChanges для получения списка изменений.
Это работает вполне хорошо, но немного неуклюже. Может кто-либо еще, кто реализовал схожую функциональность, предлагают лучший подход, и почему они думают, что это лучше?
Мне действительно было бы интересно - спасибо.
David
Корпоративный шаблон для этого состоит в том, чтобы иметь теневую таблицу поправок для каждой таблицы, которую вы создаете, чтобы отображать остаточное изображение (и, возможно, изображение перед) для всех столбцов. Вам потребуются:
Но для хорошо налаженного предприятия все это уже должно быть на месте.
Моя организация использует это только для следующих целей:
Мы создаем разные таблицы, если они нужны для самих операционных систем.
Я решаю эту проблему путем управления версиями. Одна версия - одна строка таблицы. Последняя версия - строка с самой большой датой последнего обновления.
Просто создайте триггер, и пусть он автоматически отслеживает изменения и записывает их в вашу таблицу аудита.