변경 기록을 유지하기 위해 데이터베이스와 테이블을 디자인하는 가장 좋은 방법은 무엇입니까? 사항을 추적하려면 프로젝트에서

이전 변경 사항을 추적하려면 프로젝트에서 히스토리 기능을 설정해야합니다.

지금 두 개의 테이블이 있다고 가정 해 봅시다.

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

예 : 메모에 행이 있고 사용자가 메시지를 변경하려고합니다. 변경 전과 변경 후의 상태를 추적하고 싶습니다.

이러한 각 테이블에 항목을 “오래 한”경우 열을 설정하는 가장 좋은 방법은 무엇입니까? 활성화 된 경우 0 또는 삭제 / 보이지 않는 경우 1

또한 이전 상태, 새 상태,이 ID와 관련된 AUDIT TRAIL테이블을 보유 하는 기록 ( ) 테이블 을 만들고 싶습니다 .idid



답변

보시기 바랍니다

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

데이터베이스 디자인에서 감사 추적을 작성하는 방법에 대해 잘 읽어보십시오. 데이터베이스를 구현하려면 감사 추적이 필요합니다. 항상 시스템 내에서 데이터베이스 사용자의 조치를 볼 수 있어야합니다.

표준 PTA (point in time) 열을 모든 PTA 관심 테이블에 추가하여 PTA (Point in Time) 시스템에서 변경된 행을 추적 할 수 있습니다.

나는 다음을 제안한다.

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.

답변

데이터에서 버전 관리 기능을 설계 할 때 몇 가지 최소한의 요구 사항이 있습니다.

  • 각 버전의 데이터는 독립적이며 다른 버전과 독립적이어야합니다. 이것은 현재 버전과 “기록”을 나타내는 플래그 또는 기타 표시기가 없음을 의미합니다. 또한 엔티티를 업데이트한다는 것은 이전 버전을 업데이트 할 필요없이 새 버전 만 삽입하는 것을 의미합니다.
  • 내가 행 스패닝 종속성이라고 부르는 것을 피하십시오. 그것이 행의 한 필드 (End_Date)가 다른 행의 다른 필드 (Start_Date)와 동기화되어 있어야하는 곳입니다. 이로 인해 데이터 작업이 더욱 어려워지고 예외적 인 원인이됩니다.
  • 현재 버전과 모든 이전 버전은 동일한 테이블에 있어야합니다. 따라서 동일한 쿼리를 사용하여 특정 날짜를 기준으로 과거 데이터를보고 현재 데이터를 볼 수 있습니다.
  • 버전이 지정된 데이터의 외래 키는 일반 (버전이없는) 데이터와 동일하게 작동해야합니다.
  • 새로운 개발자를위한 학습 곡선이 최소화되도록 디자인은 매우 단순하거나 보편적으로 이해되어야합니다.

다음 은 기술 박람회에서 몇 차례 발표 한 프레젠테이션 슬라이드입니다. 위의 모든 작업을 수행하는 방법을 설명합니다. 더 자세한 내용은 다음 과 같습니다 . 문서에 대해 사과해야합니다. 문서가 진행 중이며 모든 섹션이 완료되지 않았습니다. 그러나 간단한 버전 관리에서 전체 이중 시간 액세스에 이르기까지 모든 것을 구현하는 데 필요한 모든 정보를 제공해야합니다.