문제

세 개의 열이 있는 테이블이 있습니다.

사용자 varchar, 상태 varchar, 담당자 int

상태 및 담당자는 자주 업데이트되며 요구 사항 중 하나는 다음과 같습니다.

날짜/시간 값이 주어지면 해당 날짜의 각 사용자에 대한 상태 및 담당자 값이 표시됩니다.

업데이트된_at 날짜/시간 열을 테이블에 추가하고 기존 행을 업데이트하는 대신 동일한 사용자의 새 행을 삽입할 수 있지만 테이블이 커지고 쿼리 결과를 다른 테이블의 유사한 결과에 조인해야 하므로 빠른 쿼리가 필요합니다. .

SQL Server에서 이 문제에 대한 가장 효과적인 솔루션은 무엇입니까?

도움이 되었습니까?

해결책

보고 정보를 정확히 어떻게 사용할지에 따라 기본 테이블을 업데이트하기 전에 현재 값을 기록 테이블에 기록하고 타임스탬프를 추가하는 기록 테이블을 만드는 것이 가장 좋습니다.

기록에서 특정 날짜/사용자/상태만 선택하는 것이 가장 좋습니다.

다른 팁

나는 당신이 가입 할 때 현재 상태 만 쿼리 할 것이라고 가정하기 때문에 이것을 별도의 관련 테이블이라고 저장합니다. 이러한 유형의 쿼리를 많이 수행 하고이 유형의 데이터를 여러 테이블에 추가하는 경우보고를위한 별도의 OLAP 데이터베이스를 만들 것입니다.

우연히이 작업을 수행하는 한 누가 변경했는지 기록하고 싶을 때 고려할 수 있습니다. 그런 다음 기본적으로 감사 솔루션을 구축했습니다.

이를위한 한 가지 옵션은 "현재 값"테이블과 히스토리 테이블의 두 개의 개별 테이블을 사용하는 것입니다. 현재 값 테이블에는 각 사용자에 대한 유일한 최신 값이 포함되어 있으므로 작고 쉽게 접합 할 수 있습니다. 히스토리 테이블에는 타임 스탬프 열뿐만 아니라 나열된 세 개의 열이 포함되어 있으며 시간이 지남에 따라 값의 변경 사항을 추적합니다. 현재 값 테이블에서 값을 변경하려면 gettime ()을 타임 스탬프로 사용하여 히스토리 테이블에 새 값이있는 행을 동시에 추가합니다.

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