2010-08-12 4 views
3

데이터웨어 하우스를 개발 중이며 문제 해결 방법을 모릅니다. 현재 스키마는 아래에 정의됩니다데이터웨어 하우징 디자인 질문

DimInstructor < - 학생

내 OLTP 데이터베이스에 강사 변경의 세부 사항은, 내가 원하는 경우 이에 시나리오를 구현하려는

에 대한 차원 테이블 - 강사 DimStudent <에 대한 치수 표 내역보고를 위해 DimInstructor 테이블에 새 레코드를 추가합니다.

이제 DimLesson이라는 레슨 차원 테이블을 만들고 싶습니다. DimLesson에서 강사에 대한 참조를 만들고 싶습니다.

DimInstructor 테이블에는 다음이 포함

InstructorDWID < - 신원 필드를 DW InstructorID <에 들어갔을 때 - 지금 OLTP 데이터베이스

에서 온 강사의 ID, 내가 InstructorID 차를 만들 수 없습니다 키는 고유 한 것으로 보장되지 않기 때문에 (강사가 이름을 변경하면 동일한 InstructorID 값으로 DW에 2 개의 레코드가있게됩니다).

제 질문은 DimLesson의 강사를 어떻게 참조 할 수 있습니까? InstructorDWID를 사용합니까? 그렇다면 DimInstructor의 강사에 대해 2 개의 항목이 있어야만 특정 강사가 모든 수업을보고 싶을 때 쿼리가 더 복잡해집니다.

도움이 될 것입니다.

답변

1

바울은 여러 가지가 있습니다

당신이 처리 할 수있는 컬럼의 조합을 사용합니다. 유효 날짜/비활성 날짜, 시퀀스 번호 또는 버전 번호를 사용하여 동일한 InstructorID로 레코드를 구별 할 수 있습니다. instr_guid 직접 시퀀스로부터 생성되고 OLTP 시스템에 독립적이다

create table DIM_INSTRUCTOR(
    instr_guid number, --populated through a sequence  -----Composite pk-Part1 
    istr_oid number, --direct id from the OLTP system -----cmposite pk-part2 
    instr_name number, 
    other_attr varchar2(25), 
    eff_date date, 
    expiration_date date 
); 

..처럼 모든 관련 내용을 캡쳐

희미한는 것이다.

이렇게하면 주어진 강사에 대한 모든 세부 정보를 캡처 할 수 있습니다. 사실 테이블에 대한 외래 키로 instr_guid 만 사용할 수 있지만 두 테이블 (instr_guid, instr_guid)을 모두 포함하면 Datawarehousing의 목표 중 하나 인 쿼리 용이성이 향상됩니다.

유용한 링크 : 일반적으로 2 형 차원이라고 당신이 여기에 설명되어

http://en.wikipedia.org/wiki/Surrogate_key http://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_2

+0

고마워. 다른 차원 테이블의 키를 참조하려면 어떻게해야합니까? 따라서 DimLessons 테이블에는 특정 강사에 대한 모든 강의가 포함되어 있습니다. 레슨 표는 유형 2를 사용하여 동일한 방식으로 기능합니다. – Paul

+0

치수 표는 (일반적으로) 서로를 참조하지 않습니다. 이들은 모두 독립 엔티티이며이 테이블을 참조하는 사실 테이블입니다. 내가 이해 한 바에 따르면, 귀하의 시나리오에는 사실 수준의 클래스 등록이 있습니다. 각 클래스 등록은 사실 테이블의 레코드입니다. Students_dim, instructors_dim, classes_dim에는 해당 속성이 포함됩니다. enrollment_fact에는 각 테이블의 키와 enrolllment_date와 같은 기타 모든 세부 정보가 포함됩니다. –

+0

나는 이해한다고 생각한다. 따라서 강사, 학생, 수업 및 학습 예약을 기반으로 스키마를 만들고 싶다면 각 희미한 테이블 (강사, 학생, 수업)은 서로 독립적이며 사실 테이블을 통해 링크됩니까? 그렇다면 아무도 참석하지 않은 강사가 강의를 표시하는 보고서가 생성되면 어떻게 될까요? 아무도 참석하지 않았으므로 사실 테이블에 레코드가 없으면 강사를 수업에 연결하려면 어떻게해야합니까? – Paul

0

기본 키 같은 GUID/UUID 또는

+0

당신은 InstructorDWID를 의미합니까? 이 값은 ID 열이므로 고유합니다. 그러나 강사 세부 사항이 변경되면 강사는 두 개 이상의 InstructorDWID를 갖게됩니다. 예 - InstructorDWID는 현재 1이고 강사는 그녀의 제목을 Miss에서 Mrs.으로 변경합니다. 이제 InstructorDWID는 1과 2입니다. 1은 이제 폐기되었으며 2는 현재입니다. InstructorDWID 1을 참조하는 레슨은 이제 폐기됩니다. – Paul

2

. Kimball 데이터웨어 하우스 서적은 유형 2 차원에 대한 전체 섹션과 유형에 대한 ETL을 가지고 있습니다.

먼저 이해해야 할 주요 사항은 기본 키와 비즈니스 키의 차이입니다. 기본 키는 테이블의 행을 고유하게 식별하지만 비즈니스 키는 강사처럼 테이블이 설명하는 엔티티를 고유하게 식별합니다.제 (사실 어떤 종류의 데 반대) dimLesson 적절한 디자인이 비즈니스 모델에 대한 것을 제공하고, 이제

InstructorKey InstructorBusinessKey FirstName LastName row_ValidFrom row_ValidTo row_Status 
    1234   jane_doe_7211   Jane  Doe  2000-03-11 2010-08-12  expired 
    7268   jane_doe_7211   Jane  Smith  2010-08-12 3000-01-01  current 

: 강사 이름을 변경하는 경우 예를 들어, dimInstructor 테이블과 같이 보일 수 있습니다 dimLesson에는 InstructorKey이라는 열이 있습니다. ETL 프로세스 중에 dimInstructor 테이블에 새 행 (7258)을 전달할 때 dimLesson의 1234 행에 대한 모든 참조를 7268로 바꿉니다.

+0

Damir에게 감사드립니다. dimLesson 테이블은 dimInstructor 테이블과 비슷하게 디자인됩니다. 레포트가 이름을 변경 한 후에 레슨 예약이 증가했는지 또는 감소했는지에 대한 보고서의 예가있을 수 있습니까? 당신이 설명하는 방법이 가장 합리적인 것 같아요. – Paul