2011-01-10 4 views
3

Я работаю над веб-приложением с использованием рамки Zend.Отслеживать изменения значений столбца базы данных

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

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

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

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

Спасибо,

ответ

3

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

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

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

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

+0

Моя база данных не фиксирована. Будет ли это проблемой? Может ли это использоваться иначе, чем mysql? – panxpress

+0

Если по фиксированному вы подразумеваете, что столбцы будут изменены (на основе того, что пользователи делают что-то в приложении), тогда да. Это будет проблемой. И да, другие базы данных (PostGres, MSSQL, о которых я знаю, другие, скорее всего, тоже) поддерживают это. – kander

+0

Спасибо. Это действительно полезно. Столбцы не будут изменены. Просто db может быть изменен. – panxpress

1

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

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

+0

Я думаю, что я нормально обрабатываю триггеры для разных типов баз данных, так как в итоге я могу поддерживать около 3 из них. Благодарю. – panxpress

0

Я только что создал новую таблицу с именем его Comp_Hist_Log, а затем определили старые данные в ПЕРЕД UPDATE крюком $ oldData = $ массив («FIELDNAME1», «FIELDNAME2»)

затем на AFTER_UPDATE крючок в моей базе данных файл gui hook ..Я добавил этот код

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

ЗНАЧЕНИЯ ('{$ данные [' record_id ']}', '{$ oldData}', '{$ messageData}', '{$ data [' LastUpdated ']}', '{$ memberInfo [' username ']}') ", $ eo); return TRUE;

Надеюсь, что это поможет .. он действительно работает.

 Смежные вопросы

  • Нет связанных вопросов^_^