2011-01-10 5 views
3

저는 Zend 프레임 워크를 사용하여 웹 기반 응용 프로그램을 작성 중입니다.데이터베이스 열 값 변경 내용을 추적하십시오.

나는 열 무리하게 업데이트의 기록을 보존 할 수있는 방법을 찾고 있어요.

사용의 경우 : 사용자가 5 개 속성 항목을 추가 할 수 있습니다. 사용자는 5 가지 속성을 업데이트 할 수 있습니다. 그가 5 가지 속성에 대해 수행 한 모든 업데이트를 추적해야합니다.

는 길에 나는 이전 값, 새로운 값, 열 이름, 항목 ID 및 타임 스탬프를 저장하는 새 테이블라는 이름의 로그를 추가했다 생각했다.

가장 좋은 방법은 무엇입니까? 기존의 메소드/옵션/예제가 있습니까?

감사합니다.

답변

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 프레임 워크가 호출하는 저장된 proc를 보증하기에 충분히 복잡 할 수 있습니다. (내가 아는하지 않도록이 설정 될 수있는 일이 있다면 내가 젠드와 familair 아니에요, 나는 저장된 프로 시저가이 문제를 처리 할 수있는 것을 알고있다.)

+0

나는 3 개 정도를 지원할 수 있으므로 다른 데이터베이스 유형에 대해 트리거를 처리하는 것이 좋습니다. 감사. – panxpress

0

난 그냥 새 테이블 내 데이터베이스에 AFTER_UPDATE 후크에서 다음 $ oldData = $ 배열 ('하여 FieldName1', 'fieldname2')

그것을 Comp_Hist_Log라고 한 다음 업데이트 후크 전에 반드시 에서 이전 데이터를 정의 생성 GUI 훅 파일 ..이 코드

SQL ("Comp_Hist_Log 삽입 반 (Com_Rec_Id, old_data, new_data, ChangedDate, ChangedBy)

VALUES (추가 '{$ 데이터 ["RECORD_ID "]}", "{$ oldData}, '{$ messageData}', '{$ data ['LastUpdated ']}', {$ memberInfo [ 'username']} ') ", $ eo); return TRUE;

희망이 있습니다. 작동합니다.