위의 설명에 따라 실제로 필요한 테이블에만 감사를 추가하는 것이 좋습니다.
일반적으로 응용 프로그램 사용자를 감사하려고합니다. 웹 또는 SOA와 같은 응용 프로그램이 동일한 자격 증명을 가진 모든 사용자를 연결하는 경우가 많으므로 DB 로그인을 저장하는 것은 의미가 없습니다.
IMHO, date created
/last date updated
/lastupdateby
패턴은 전체 사진을 제공하지 않습니다. 마지막으로 변경 한 사람과 변경된 사항 만 볼 수 있기 때문입니다. 감사를 수행하는 경우 감사 대신 trigger과 같은 패턴을 사용하여 전체 변경 감사를 수행하는 것이 좋습니다. 표 삽입, 업데이트/삭제가 캡슐화되어 있으면 트리거를 사용하지 않아도됩니다. Stored Procedures
을 통해 사실, 감사 테이블은 매우 커질 것이지만, 일반적으로 마녀 사냥에 많이 걸리지는 않으며 아카이브 될 수 있고 날짜별로 쉽게 파티션 될 수 있습니다 (읽기 전용으로 만들 수 있음). 분리 된 감사 테이블을 사용하면 DateCreated
또는 LastDateUpdated
열은 필요하지 않으므로이를 파생시킬 수 있습니다. SQL은 응용 프로그램 사용자를 파생시킬 수 없기 때문에 일반적으로 최종 변경 사용자가 필요합니다.
논리적 삭제를 결정하면 프로세스 상태를 모델링하는 테이블 (예 : 지불 상태 등)이있을 가능성이 있으므로 논리적 삭제를 나타내는 필드로 '상태'를 사용하지 마십시오.) ActiveYN
또는 IsActive
과 같은 bit
또는 char
필드를 사용하면 논리적 삭제가 일반적입니다.
모든 쿼리가 레코드를 필터링해야하고, 트랜잭션 테이블의 삭제 된 레코드를 유지하면 이러한 테이블을 특히 Many : Many/junction
테이블에서 더 크게 만들 수 있으므로 논리 삭제가 번거로울 수 있습니다. 2 상태 필드는 인덱스에서 유용 할 정도로 선택 적이기 때문에 성능에 영향을 미칠 수 있습니다. 이 경우 전체 감사를 통한 실제 삭제가 더 적합 할 수 있습니다.
나는 이것에 대한 정식 답이 없다고 생각합니다. 어떤 대답이라도 누군가의 견해를 반영 할뿐입니다. – tvanfosson
나는 일상적인 문제로 이러한 열을 넣지 않을 것이다. 진정한 필요가있을 때만. –