SQL에 감사 테이블에 대한 기본 키를 포함시켜야합니까?

StackOverflow https://stackoverflow.com/questions/724831

  •  05-09-2019
  •  | 
  •  

문제

메인 테이블의 레코드에서 변경된 변경 사항을 추적하기위한 감사 테이블을 만들고 있습니다.

여기서 감사 테이블은 메인 테이블 (직원 테이블 예 : 직원 테이블)의 정확한 복제본이지만 메인 테이블에서 모든 변경 사항에 대해 '인서트'만 있습니다. 따라서 복제물 (동일한 EmployeeIds)이 있으므로 각 항목에 대해 별도의 Audit_id를 추가해야합니까?

도움이 되었습니까?

해결책

물론 테이블에 어떤 종류의 기본 키가 필요합니다.

중복을 제거하고 '삽입 이유'(디버깅 목적으로)를 추적하는 것이 더 쉬울 것입니다.

약간 RDBMS(같은 MySQL ~와 함께 InnoDB) 실제로 명시 적으로하지 않으면 숨겨진 기본 키를 만듭니다. 따라서 직접 수행하고 눈에 띄고 사용할 수있는 경우 만하십시오.

다른 팁

당신은 거의 가지다 직원의 직원이 고유 한 동안 (업데이트는 새 행을 추가하지 않고 기존 행을 수정 함), 감사 테이블에는 동일한 직원 인 삽입물이있는 여러 행이 있습니다 (각 후속마다 하나는 하나씩 하나는 각각의 후속 삽입물이 있습니다. 해당 직원의 업데이트).

게다가 직원의 단체는 직원입니다. 그러나 감사의 엔티티는 감사 기록입니다. 그들은 자신의 신분증을 가지고 있습니다.

문제가 발생하면 실제로 감사 레코드를 업데이트하거나 삭제해야합니다. 실제로 직원이 삽입되면 하나의 열 값이 업데이트 된 다음 원래 값으로 다시 업데이트되면 이제 두 개의 동일한 레코드가 감사에 있습니다. 업데이트 또는 삭제에서 한계 조항을 사용하지 않는 한 삭제 또는 업데이트해야합니다.

또한 감사 테이블에 타임 스탬프를 추가하는 유용성을 가리 킵니다. 그러나 당신이 그것을 사용하고 직원을 복합 키로 사용해야한다고 생각하지 마십시오. 먼저, 복합 키가 빨라집니다. 둘째, 타임 스탬프의 세분성은 시스템이 두 개의 업데이트를 수행하는 데 걸리는 시간보다 적을 가능성이 있습니다 (예 : 배치 작업과 같은 동일한 직원의 두 업데이트). (Sybase DateTime에는 3 밀리 초의 세분화가 있습니다. Intel Core 2 Extreme은 거의 200을 할 수 있습니다. 백만 그 당시의 지침.)

예. 나는 모든 테이블의 비 규모의 기본 키가 실용적인 방식으로 참조 할 수 있기 때문에 모범 사례라고 생각합니다. "변경 사항을 시각화 할 수 있습니다 audit-id 에게 audit-id+1"날짜를 사용하는 것보다 훨씬 쉽게.

직원 ID와 감사 데이터 타임을 복합 키로 사용할 수 있습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top