Отслеживать изменения значений столбцов базы данных - PullRequest
4 голосов
/ 10 января 2011

Я работаю над веб-приложением, используя Zend Framework.

Я ищу способ сохранить историю обновлений, сделанных для нескольких столбцов.

Вариант использования: пользователь может добавить элемент с 5 свойствами.Пользователь может обновить 5 свойств.Мне нужно отследить все обновления, которые он делает для этих 5 свойств.

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

Каков наилучший способ сделать это?Существуют ли какие-либо методы / опции / примеры?

Спасибо,

Ответы [ 4 ]

4 голосов
/ 10 января 2011

Что вы, вероятно, ищете, это журнал аудита.Вы можете создать его, используя триггеры в своей базе данных MySQL.

Пример того, как это сделать, приведен здесь: http://ronaldbradford.com/blog/auditing-your-mysql-data-2008-07-15/

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

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

2 голосов
/ 10 января 2011

Триггеры - это самый распространенный способ проведения аудита и единственный действительно надежный способ получить информацию о том, что было сделано, независимо от того, было ли это сделано из пользовательского интерфейса или где-либо еще. Они различаются в зависимости от базы данных в том, как они будут написаны. Если вы знаете возможные типы поддерживаемых баз данных, вы можете написать отдельные триггеры для каждого из них.

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

0 голосов
/ 22 апреля 2014

Я только что создал новую таблицу с именем Comp_Hist_Log, а затем определил старые данные в ДО ОБНОВЛЕНИЯ крючком $ oldData = $ array ('fieldname1', 'fieldname2')

Затем в перехватчике AFTER_UPDATE в файле перехвата графического интерфейса базы данных ... Я добавил этот код

sql ("INSERT INTO Comp_Hist_Log (Com_Rec_Id, old_data, new_data, ChangedDate, ChangedBy)

VALUES ('{$ data [' Record_Id ']}', '{$ oldData}', '{$ messageData}', '{$ data [' LastUpdated ']}', '{$ memberInfo [' username ']}') ", $ eo); возврат ИСТИНА;

Надеюсь, это поможет .. это работает.

0 голосов
/ 22 апреля 2014

Вот лучший вариант .. См. Pop On Audit Trail

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