테이블 감사 방법에 대한 주제가 최근에 토론에서 나타났습니다 ... 그래서 나는이 문제에 접근하는 가장 좋은 방법이 무엇인지에 대한 여러분의 의견을 좋아합니다. 우리는 DBA가 각자 올바른 방법이라고 믿었던 것처럼 이전 DBA와 마찬가지로 두 가지 방식 (모두 좋지 않음)을 데이터베이스에 혼합했습니다. 그래서 우리는 어떤 모델을 따라갈 필요가 있습니다.감사 트리거 : INSERTED 또는 DELETED 시스템 테이블 사용
CREATE TABLE dbo.Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
)
CREATE TABLE dbo.Audit_Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
Audit_Type VARCHAR(1) NOT NULL
Audited_Created_On DATETIME
Audit_Created_By VARCHAR(50)
)
접근 1 : 스토어, 감사 테이블 기본 테이블에서 삭제 교체, 레코드 만/년 (사용하여 시스템 테이블 DELETED). 따라서 주 테이블의 각 UPDATE 및 DELETE에 대해 'Audit_Type'열이 'U'(UPDATE의 경우) 또는 'D'(DELETE의 경우) 인 감사 테이블에 INSERTED됩니다.
INSERT 감사하지 않습니다. 현재 버전의 레코드의 경우 항상 주 테이블을 쿼리합니다. 그리고 히스토리에 대해 감사 테이블을 쿼리합니다.
장점 : 이전 버전의 레코드를 저장하는 데 유용합니다. : 특정 레코드의 기록을 알아야 할 경우 주 테이블과 감사 테이블을 조인해야합니다.
Appraoch 2 : (시스템 테이블 INSERTED를 사용하여) 주 테이블로 이동하는 모든 레코드를 감사 테이블에 저장하십시오.
주 테이블에 INSERTED/UPDATED/DELETED 인 각 레코드는 감사 테이블에도 저장됩니다. 따라서 새 레코드를 삽입하면 감사 테이블에도 삽입됩니다. 갱신되면 INSERTED 테이블의 새 버전이 감사 테이블에 저장됩니다. 삭제되면 이전 버전 (DELETED에서) 테이블이 감사 테이블에 저장됩니다.
장점 : 특정 기록의 기록을 알아야하는 경우 한 곳에서 모든 것을 확인할 수 있습니다.
여기에 모두 나열하지 않았지만 각 접근법에는 장단점이 있습니까?
이 질문/게시물에 대한 모든 생각을 적어서 다시 읽은 후에도 동일한 생각을 가지고있었습니다. 접근법 2는 더 나은 것으로 보인다. 작은 머리 너머는 무시해도됩니다. 귀하의 의견을 보내 주셔서 감사합니다. –