2011-02-18 4 views
3

내가 작업하고있는 회사가 설정중인 프로젝트의 경우 사용자가 수행하는 다양한 작업 (시스템의 테이블 변경)에 대한 감사 (로그 저장)가 필요합니다. 현재 세 가지 유형의 작업 만 있습니다. 그러나 이것은 미래에 성장할 수 있습니다.SQL - 감사 로그 테이블 디자인 - 어느 것을 선호합니까?

이에 대한 나의 제안했다

다음 스키마 테이블의 관계 (예) :

Table AuditLog 
------------------------------ 
Id | PK 
Description 
Created 

그리고 모든 작업 :

Table ExampleTaskAuditLog 
------------------------------ 
ExampleTaskId | FK PK 
AuditLogId | FK PK 

그리고 :

Table AnotherExampleTaskAuditLog 
------------------------------ 
AnotherExampleTaskId | FK PK 
AuditLogId | FK PK 

기본적으로, 대한 우리가 감사해야 할 모든 종류의 업무, 우리는 관계를 유지하는 새로운 테이블을 갖게 될 것입니다.

다른 개발자가 무엇을 제안, 다음이었다 : 기본적으로

Table AuditLog 
------------------------------ 
Id (PK) 
Description 
Created 
ExampleTaskId | NULLABLE 
AnotherExampleTaskId | NULLABLE 
Type | (an integer id which indicates whether this is a "example task" or a "another example task"). 

을, 우리는, 우리가 예제 작업의 정체성과에 ExampleTaskId 필드를 설정합니다 "ExampleTask"에 대한 로그를 만들 수 있다면 해당 ExampleTask-enum 값을 입력하십시오.

위의 표는 그가 성실 (나는 좋다고 생각합니다!)과 성과에 대해 논쟁하고 있기 때문입니다. 주로 FK 제약 조건이 있기 때문에 관련 로그를 얻으려면 테이블에 가입해야합니다 (예, RMDBS - MSSQL). 또한 모든 로그에 대해 두 개의 테이블이 있으므로 두 개의 삽입 (무결성 조회 등)이 필요합니다. 물론, 이것이 정확합니다. 그러나 나는 그 문제를 볼 수 없다. 최소한이기 때문에 특히 성능이 아닙니다. 또한 저장 될 로그는 1 년 동안 총 5-10K가되지 않을 가능성이 큽니다. 2 년 후, 테이블은 최대 30-40K 행을 포함 할 수 있습니다.

위 내용에 대한 귀하의 의견은 무엇입니까? 또한 위의 솔루션 중 어느 것을 선호 하시겠습니까? 그 이유는 무엇입니까?

+0

'ExampleTaskAuditLog '와'AnotherExampleTaskAuditLog' 테이블을 사용하여 다 대다 관계를 저장합니까? – Justin

답변

2

ExampleTaskIdAnotherExampleTaskId이 동일한 데이터 형식 인 경우 다음 열이있는 테이블이 하나 뿐인 이유는 무엇입니까?

  • 아이디
  • 그렇지 않으면이 상대적으로 어려워진다 제쳐두고, 당신의 AuditLog 테이블 확실히가하는 TaskType 필드가 있어야
  • TaskType

  • TASKID를 만든 설명
  • 어떤 유형의 변경을 로그가 나타납니다.

    또한 꼭 필요한 경우가 아니면 (예 : 성능상의 이유로) 테이블을 비정규 화 (즉 주어진 작업 유형에 대해 항상 null이되는 것)하는 것을 피합니다.대신에 나는 테이블을 사용하는 것이 좋습니다 및 작업 특정 컬럼 조인 것 : 로그인하는

    Table ExampleTaskAuditLog 
    ------------------------------ 
    AuditId (PK) 
    TaskSpecificField 
    AnotherTaskSpecificField 
    
  • +0

    동의합니다. 모든 작업에 대한 레코드가있는 감사 테이블이 하나 있습니다. 각 작업에 대해 다른 테이블을 갖는 것은 지저분해질 수 있습니다. 당신은 부부가 있다고 생각할지도 모르지만 갑자기 감사원이 들러서 감사해야 할 15 가지가 더 있다고 말합니다. 또한 말하는 행 수가 적어서 실적이 떨어지지 않아야합니다. –

    0

    을 가정하면 이벤트/작업/활동, 그리고 개별 테이블에 대한 수정, 내가 같은를 들어 첫 번째로 가고 싶어 이유는 @ Kragen이 말합니다 (upvoted). 그러나 개별 테이블에 대한 변경 사항을 감사하는 경우 감사 할 각 테이블에 대해 하나의 감사 테이블을 사용합니다.

    부수적 인 질문입니다. 외래 키를 정말로 원하십니까? 테이블의 항목 (행)이 삭제되면 해당 항목에 대한 감사 내역을 삭제해야합니다. 기존 항목에 대한 감사 로그 만 필요합니까? (일반적으로 "감사"란 일반적으로 "자신이 무엇을하고 있는지 감시"하고, "월스트리트"에서 일반적으로 싫은 행동에 대한 모든 흔적을 없앨 수 있음을 의미합니다.

    관련 문제