나는이 다음 표 :SQL 서버 - 논리 질문
Id INT/PK
UserId INT/FK
CreatedDate DATETIME
ActivityMarker INT/FK
이 테이블에 기록에서 삭제할 수 있습니다
(예를 들어 오늘 내가 2010년 1월 1일에서 레코드를 삭제할 수 있습니다 (포함 레코드 업데이트가.)). CreatedDate는 레코드가 작성된 날짜를 포함합니다. ActivityMarker 및 UserId를 업데이트 할 수 있습니다.
내가해야 할 일은 주어진 UserId X에 대해 ActivityMarker Y가있는 레코드의 일일 기록을 기록하는 것입니다.이 정보는 사용자에게 주어진 마커에 대해 얼마나 많은 항목이 있는지를 차트로 나타 내기 위해 필요합니다 시각.
본인은 현재 테이블 구조가 이러한 유형의 기록 정보를 지원하지 않는다는 것을 알고 있습니다. 누군가가 ActivitiyMarker 또는 UserId의 가치를 변경하면 이전 값은 영원히 사라지고 변경 사항이 언제 발생했는지 알 수 없습니다.
특정 날짜에 주어진 UserId 및 ActivityMarker에 대한 레코드 수를 얻을 수 있도록이 정보를 유지하는 가장 좋은 방법을 제안 할 수 있습니까?
'효과적인 데이트'제안에 대해 자세히 설명해 주시겠습니까? 어떻게 도움이됩니까? – Alex
나중에 그룹 별 성명을 사용하여 그 사람의 레코드를 얻지 못한 가장 최근의 유효 날짜가있는 레코드를 찾을 수 있습니다. 트리거를 사용하면 활성 레코드의 플래그를 업데이트하여 쿼리를 쉽게 할 수 있으므로 darn 테이블을 쿼리 할 때마다 max (effective_date)로 전체 그룹을 수행 할 필요가 없습니다. – Sam
테이블이 커질 수 있으며이 테이블을 작게 유지해야하는 경우 감사 테이블이 더 나은 선택 일 수 있습니다. 물론, 감사 트리거는 리소스를 사용하지만 삽입/업데이트 중에 만 사용합니다. – Sam