변경 기록을 유지하기 위해 데이터베이스와 테이블을 디자인하는 가장 좋은 방법은 무엇입니까?


16

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

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

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

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

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

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


답변:


5

보시기 바랍니다

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.

OLTP 애플리케이션에 '솔루션 No. 2 : 전용 데이터 추적 테이블'을 적용하는 가장 좋은 방법은 무엇입니까?
AA.SC

내가 일하는 회사는 현재 여러 감사 스키마를 위해 여러 스키마를 사용합니다. 감사 테이블은 솔루션 # 2를 사용할 때 실제로 매우 단순한 디자인입니다 (이것은 직장에서 사용하는 것과 정확히 같습니다). 다른 작업 (인벤토리 테이블 업데이트, 고객 정보 업데이트 또는 삭제, 고객에게 제공 한 크레딧 등)을 분류하고 사용자가 수행 할 수있는 일반적인 작업을 기반으로 감사 테이블을 작성하십시오. 그렇지 않으면 솔루션 2를 DB에 적용하는 것과 관련하여 귀하의 질문에 대답합니까? 감사!
헥터

실제로 감사 테이블을 사용하여 첫 번째 접근 방식으로 데이터를 이미 감사하지만 감사 데이터가 점점 커지고 있으므로 변경된 열에 대해 데이터를 캡처하여 접근 방식을 변환하려고합니다. 내 질문은 어떻게이 접근법을 달성 할 수 있습니까? 테이블의 어떤 열이 변경되었는지 추적하는 가장 좋은 방법은 무엇입니까? .. 테이블에 20 개가 넘는 열이 있으면 그 중 하나에 DataType Text가 있습니다.
AA.SC

10

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

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

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


1
아주 좋은 포인트! 그러나 This means no flag or other indicator showing which is the current version and which are "history."플래그 또는 표시 기가없는 경우 현재 버전과 기록 버전을 어떻게 구별합니까? 특히 세 번째 요점을 바탕으로 동일한 테이블에 있어야한다고 제안합니다.
GMsoF

프레젠테이션은 테이블에서 현재 및 / 또는 과거 데이터를 읽는 쿼리를 포함하여 예제 디자인을 보여줍니다. 더 깊이 들여다보기에 흥미로워 보인다면 문서에 훨씬 더 자세한 내용이 들어 있습니다.
TommCatt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.