첫째,이 같은 것을에서 테이블 구조를 변경하는 것이 좋습니다 :
id field1 field2 field3 field4 timestamp
이런 일에 :
Table 1
-------
id fieldKey value timestamp
1 1 42 12:03am
2 3 'Cow' 1:45am
3 2 'Moo' 2:33am
4 4 99 3:59am
Table 2
-------
fieldKey fieldLabel
1 Field One
2 Field Two
3 Event One
4 Event Two
두 번째 , 당신은 당신이 원하는 것을 얻을 수 있습니다. (long 필드의 경우) 필드 값의 해시를 계산하고 타임 스탬프와 함께 다른 필드 (oldField1, oldField2 등)에 저장 한 다음 테이블을 폴링합니다. 모든 데이터베이스는 SHA1 ('xyz') 또는 MD5 ('abc')와 같은 해시 함수를 가지고 있다고 믿지만 각 데이터베이스마다 약간 다른 이름이있을 수 있습니다.
테이블을 폴링 할 때 변경된 행이 표시되며 필드 비교를 통해 필드를 변경하여 어떤 필드가 변경되었는지 확인할 수 있습니다. 따라서 field1을 oldField1, field2를 oldField2, field3을 oldField3 등과 비교합니다. BLOB의 경우 SHA1 (field4)을 oldField4와 비교할 수 있습니다.
타임 스탬프를 업데이트 할 때 필드를 복사하는 저장 프로 시저 트리거를 만듭니다.
다른 해결책은 변경 사항 만 저장하는 데이터 변경 로그 테이블을 만드는 것입니다. 그것은 트리거 저장 프로 시저를 통해 삽입 될 것이고, 이것은 다음과 같이 보일 것입니다.
id tableName rowKey fieldName oldValue newValue timestamp
1 WINDOWS_EVENTS 42 event1 stable crash 4:44am
Ionno 그러나 데이터베이스 독립적 인 것으로 원하면 ORM이 필요합니다. – mpen
@ 마크, 예를 들어 nHibernate에서 필요한 것은 무엇입니까? 또한 ORM이 주어진 시간에 대략 100,000 개의 레코드가있는 테이블 (10 만 개가 넘지 않음)에 적합할지 확신하지 못합니다. – Liao