내가 작업하고있는 회사가 설정중인 프로젝트의 경우 사용자가 수행하는 다양한 작업 (시스템의 테이블 변경)에 대한 감사 (로그 저장)가 필요합니다. 현재 세 가지 유형의 작업 만 있습니다. 그러나 이것은 미래에 성장할 수 있습니다.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 행을 포함 할 수 있습니다.
위 내용에 대한 귀하의 의견은 무엇입니까? 또한 위의 솔루션 중 어느 것을 선호 하시겠습니까? 그 이유는 무엇입니까?
'ExampleTaskAuditLog '와'AnotherExampleTaskAuditLog' 테이블을 사용하여 다 대다 관계를 저장합니까? – Justin