2012-02-02 2 views
0

이것은 데이터 마트 /웨어 하우스를 처음 작성한 시도이며 스키마를 가장 잘 설계하는 방법에 대해 약간 혼란 스럽습니다. 프로젝트 배경 : 원래 클라이언트에 대한 정보를 캡처하는 관계형 데이터베이스를 만들었습니다. 단순화 된 스키마는 다음과 같습니다.데이터 마트 생성 방법

ClientTbl: 
ID:PK; 
FName:String; 
LName:String; 

ClientEDU(one to many) 
ID:PK; 
ClientID:FK; 
SchoolName:String; 
Degree:String; 
GPA:String; 

ClientJobs(One to many) 
ID:PK; 
ClientID:FK; 
OrganizationName:string; 
Industry:String; 
StartDate:Date; 
EndDate:Date; 
Salary:double; 
CityLocation: String; 

이것은 단순한 예입니다. 실제로는 수천 개의 레코드를 보유하는 여러 개의 테이블이 있습니다. 이 테이블에서 쿼리를 실행하려고 할 때 매우 많은 시간이 소요될 수 있습니다. 데이터 마트를 만드는 것이 도움이 될 것 같습니다. 이렇게하면 밤마다 시간이 많이 걸리는 데이터 마트에 대한 업데이트를 실행할 수 있습니다. 그런 다음 우리 DM에 묻는 데이터를 쿼리하는 것이 빠릅니다. 스키마를 가장 잘 설계하는 방법에 어려움을 겪고 있습니다. 예 문제는 내가 위의 예제 테이블을 기반으로, 데이터 마트에 대답하고 싶은 이것이다 : 내 독서에서

% of clients that attend each school in our db 
% that have each degree in our db 
Avg salary of client 
Avg length of stay at a job 
% of clients that worked in each city, that is found in the db 

, 나는 사실 테이블 (평균 급여를 모두 계산 된 값을 포함 할 것을 알고, 길이 등) 및 각 차원의 데이터 (작업 또는 교육)을 포함하지만 나는 그들이 어떻게 묶여 있는지 이해하지 못한다. 내 팩트 테이블에 각 클라이언트에 대한 행이 있습니까? 한 행만?

어떤 도움을 내가 '데이터웨어 하우스는'마법의 탄환 생각하지 않습니다

감사

+1

Run - 걸어 서지 않아 서점에 가서 Ralph Kimball의 The Data Warehousing Toolkit을 구입하십시오. 데이터웨어 하우스에는 많은 부분이 있으며 짧은 대답만으로는 충분하지 않습니다. –

+0

그래, 전 며칠 전에 실제로 샀어. 그러나 사실, 나는 충돌 과정이 필요합니다. 이 프로젝트는 곧 끝날 예정이며 읽을 시간이별로 없습니다. – jason

+1

"읽을 시간이 없습니다." 그렇다면 당신은 운명을 잃습니다. 그것은 단순하지 않습니다. 데이터웨어 하우징에 대한 로열로드는 없습니다. 충돌 코스는 충돌로 이어집니다. 건배. –

답변

1

이것은 클라이언트의 인구 통계 요약을 포함하기 때문에 어려운 문제입니다.

당신은 사실처럼 보이는 직업이 있습니다. 그것은 지속 기간과 봉급을 가지고 있습니다. 우리는 그들이 적절한 단위를 가지고 있기 때문에 대책이라고 알고 있습니다.

사실 사실을 감안할 때이 사실의 크기는 무엇입니까?

  • 는 클라이언트

  • 시간

이 아마도 당신이 작업 (예를 들어 지리, 산업)에 대한 다른 일을 알고 시작했다.

시간은 특정 시점입니다. 일반적으로 날짜와 여러 가지보고 카테고리가있는 테이블입니다 (분기, 주, 회계 기간 등).

클라이언트는 개인입니다. 사람들은 특히 좋은 차원을 만들지 않습니다. 그들은 자신의 차원이 큽니다.

선택 1. "눈송이"스키마.자신의 지리, 학위 및 학교를 포함하여 많은 차원을 가진 일종의 사실로 고객을 대우하는 것.

선택 사항 2. "인구 통계"차원. 학위 프로그램, GPA 범위, 학교 이름 등의 요약입니다. 이는 사실상 적절한 직업 정보와 고객 간의 연관성입니다. 직업은 인구 통계 카테고리에 속합니다. 많은 고객이 또한 해당 카테고리에 속합니다.

사실 테이블에 각 클라이언트에 대한 행이 있습니까? 한 행만?

사실 테이블에는 사실의 다양한 차원과 관련된 사실의 측정 가능한 인스턴스마다 하나의 행이 있습니다.

작업 팩트에는 급여, 기간 및 최소한 외래 키 참조 (시작 날짜 및 인구 통계)라는 두 가지 조치가 있습니다. 작업 (지리 또는 산업과 같은)의 다른 차원 속성이있는 경우, 이는 작업의 외래 키입니다.

클라이언트 인구 통계는 하나 이상의 작업과 연관됩니다.

지리 또는 산업에서도 마찬가지입니다.

클라이언트가 특수한 경우이기 때문에 하나 이상의 클라이언트가 에 해당 클라이언트 인구 통계 차원 행에 대한 참조를 갖습니다.

+0

감사합니다 S.Lott! 더 많은 것을 조사 할 확실히 뭔가! – jason

0

좋은 것입니다. 당신은 당신의 결과는 '시간 낭비'

당신이 전혀 일반 벗어에게 질문하는 이유에 집중해야

.

몇 가지 사항이 있습니다. 학교에 기본 문자열로 String 학교 이름이 실제로 있습니까?

아마도 스키마의 실제 하위 집합과 문제가있는 특정 쿼리를 게시하면 실제 개선 방법에 대한 도움말을 얻을 수 있습니다.

+0

Hello Randy, "PK라는 문자열 학교 이름"에서 무엇을 언급하는지 잘 모르겠습니다. 필자의 예에서는 ID가 PK이고 SchooName이 속성이다. 도움이된다면 ER 다이어그램을 부착 할 수 있습니다 (여기에 사진을 첨부 할 수 있다고 가정) – jason