느린 변경 차원 형식 중에서 선택

완료됨

별모양 스키마 디자인 이론은 일반적인 SCD 유형을 나타냅니다. 형식 1과 형식 2가 가장 일반적입니다. 실제로 차원 테이블에서는 형식 3과 형식 6을 비롯한 기록 추적 방법의 조합을 지원할 수도 있습니다. 이러한 SCD 유형의 차이점을 알아보겠습니다.

유형 1 SCD

유형 1 SCD는 항상 최신 값을 반영하며 원본 데이터의 변경 내용이 검색되면 차원 테이블 데이터를 덮어씁니다. 이 디자인 방법은 일반적으로 고객의 메일 주소 또는 전화 번호와 같이 보충 값을 저장하는 열에 사용됩니다. 고객 메일 주소 또는 전화 번호가 변경되는 경우 차원 테이블은 고객 행을 새 값으로 업데이트합니다. 고객에게 항상 이 연락처 정보가 있는 것처럼 동작합니다. CustomerID와 같은 키 필드는 동일하게 유지되므로 팩트 테이블의 레코드가 업데이트된 고객 레코드에 자동으로 연결됩니다.

An example Type 1 SCD row that updates CompanyName and ModifiedDate.

유형 2 SCD

유형 2 SCD는 차원 멤버의 버전 관리를 지원합니다. 원본 시스템에서 버전을 저장하지 않아 데이터 웨어하우스 로드 프로세스에서 차원 테이블의 변경 내용을 검색하고 관리하는 경우가 많습니다. 이 경우에는 차원 테이블이 서로게이트 키를 사용하여 차원 멤버의 버전에 대한 고유 참조를 제공해야 합니다. 또한 버전의 날짜 범위 유효성을 정의하는 열(예: StartDateEndDate)과 현재 차원 멤버를 기준으로 쉽게 필터링하기 위한 플래그 열(예: IsCurrent)을 포함합니다.

예를 들어 Adventure Works는 판매 지역에 영업 사원을 할당합니다. 영업 사원이 다른 지역으로 재배치되는 경우 새 버전의 영업 사원을 만들어 기록 팩트를 이전 지역과 연결된 상태로 유지해야 합니다. 영업 사원별로 정확한 판매 기록 분석을 지원하려면 차원 테이블에 영업 사원 버전 및 관련 지역을 저장해야 합니다. 시간 유효성을 정의하는 시작 날짜 및 종료 날짜 값도 테이블에 포함되어야 합니다. 현재 버전은 빈 종료 날짜(또는 9999/12/31)를 정의할 수 있으며, 해당 행이 현재 버전임을 나타냅니다. 비즈니스 키(이 경우에는 직원 ID)가 고유하지 않으므로, 테이블에서 서로게이트 키도 정의해야 합니다.

An example Type 2 SCD row that shows a new record for Region change.

원본 데이터가 버전을 저장하지 않는 경우 데이터 웨어하우스와 같은 중간 시스템을 사용하여 변경 내용을 검색하고 저장해야 한다는 점을 이해하는 것이 중요합니다. 테이블 로드 프로세스는 기존 데이터를 보존하고 변경 내용을 검색해야 합니다. 변경 내용이 검색되면 테이블 로드 프로세스에서 현재 버전을 만료해야 합니다. EndDate 값을 업데이트하고, 이전 EndDate 값에서 시작하는 StartDate 값으로 새 버전을 삽입하여 이러한 변경 내용을 기록합니다. 또한 관련 팩트는 시간 기반 조회를 사용하여 팩트 날짜와 관련된 차원 키 값을 검색해야 합니다.

유형 3 SCD

유형 3 SCD는 차원 멤버의 두 버전을 개별 열로 저장할 수 있습니다. 이 테이블에는 멤버의 현재 값을 위한 열과 더불어 멤버의 원래 또는 이전 값이 포함됩니다. 따라서 유형 3은 유형 2 SCD에서와 같이 각 변경 내용을 추적하는 추가 행을 저장하지 않고 추가 열을 사용하여 기록의 키 인스턴스 하나를 추적합니다.

이런 형식의 추적은 차원 테이블의 1~2개 열에 사용할 수 있습니다. 일반적으로 같은 테이블의 여러 멤버에는 이 형식을 사용하지 않습니다. 종종 형식 1이나 형식 2 멤버와 함께 사용하기도 합니다.

An example Type 3 SCD row that shows an updated CurrentEmail column and an unchanged OriginalEmail column.

유형 6 SCD

유형 6 SCD는 유형 1, 2, 3을 결합합니다. 형식 2 멤버가 변경되면 적절한 StartDate 및 EndDate가 있는 새 행을 만듭니다. 형식 6 디자인에서는 해당 엔터티 모든 버전이 현재 값도 저장하므로 현재 값 또는 기록 값을 쉽게 보고할 수 있습니다.

영업 지역 예제를 사용하여 지역 열을 CurrentRegionHistoricalRegion으로 분할합니다. CurrentRegion은 항상 최신 값을 표시하고 HistoricalRegionStartDate에서 EndDate 사이에 유효한 지역을 표시합니다. 따라서 같은 영업 사원의 경우 CurrentRegion의 각 레코드에는 최신 지역이 채워져 있고 HistoricalRegion은 유형 2 SCD 예제의 지역 필드와 똑같이 작동합니다.

An example Type 6 SCD row that shows a new record for Region change with CurrentRegion updated for old and new row.