2017-02-11 4 views
0

데이터웨어 하우스에서 FACT 테이블을 키잉 할 때 외부 테이블의 기본 키 또는 비즈니스에서 사용하는 고유 키 또는 식별자를 사용하는 것이 가장 좋습니다.주요 데이터웨어 하우스 사실 테이블

예를 들어 (아래 그림 참조), "DimStores"및 "DimCustomers"라는 두 개의 차원 테이블과 "FactSales"라는 하나의 FACT 테이블이 있다고 가정합니다. 두 가지 차원 테이블 모두 정수 데이터 형식 인 "ID"라는 인덱스 된 기본 키 필드를 가지고 있습니다. 또한 "번호"라는 영숫자 텍스트 데이터 형식 인 인덱싱 된 고유 비즈니스 키 필드가 있습니다.

일반적으로 FACT 테이블의 외래 키로 차원 테이블의 기본 키를 사용합니다. 그러나 그것이 최선의 접근 방법인지 궁금합니다.

기본 키를 사용하여 FACT 테이블의 사실을 조회하거나 계산하려면 항상 기본 키에 대한 조인 쿼리를 수행하고 조회로 비즈니스 키를 사용해야합니다 . 그 이유는 대부분의 사용자가 FACT 테이블에서 조회를 수행하는 기본 키 값을 알지 못하기 때문입니다. 그러나 그들은 비즈니스 키를 알 수 있습니다. 따라서 해당 비즈니스 키를 사용하려면 관계를 만들기 위해 조인 쿼리를 수행해야합니다.

어쨌든 비즈니스 키가 인덱싱되므로 FACT 테이블의 외래 키로 사용하는 것이 더 좋을까요? 그렇게하면 조인을하지 않고 직접 조회 또는 계산을 수행 할 수 있습니다.

조인 쿼리가 비용이 많이 드는 지 궁금합니다. 수천만 개의 레코드가있는 수십억 개의 레코드 FACT 테이블과 차원을 처리한다고 가정 해보십시오.

예 테이블 :

DimStores: 
+------------+-------------+-------------+ 
| StoreId | StoreNumber | StoreName | 
+------------+-------------+-------------+ 
| 1   | S001  | Los Angeles | 
| 2   | S002  | New York | 
+------------+-------------+-------------+ 

DimCustomers: 
+------------+----------------+--------------+ 
| CustomerId | CustomerNumber | CustomerName | 
+------------+----------------+--------------+ 
| 1   | S001   | Michael  | 
| 2   | S002   | Kareem  | 
| 3   | S003   | Larry  | 
| 4   | S004   | Erving  | 
+------------+----------------+--------------+ 

FactSales: 
+---------+------------+------------+ 
| StoreId | CustomerId | SaleAmount | 
+---------+------------+------------+ 
| 1  | 1   |  $400 | 
| 1  | 2   |  $300 | 
| 2  | 3   |  $200 | 
| 2  | 4   |  $100 | 
+---------+------------+------------+ 
로스 각도 저장소의 총 매출을 얻을 위에서

나는이 작업을 수행해야 할 것 :

Select Sum(SaleAmount) 
From FactSales FT 
Inner Join DimStores D1 ON FT.StoreId = D1.StoreId 
Where D1.StoreNumber = 'S001' 

내가 "StoreNumber"를 사용했고, "FactSales"테이블 대신 "CustomerNumber"필드를 외래 키로 사용하십시오. 나는 조인 쿼리를해야했다 않았을 것이다 직접이 대신 할 수 있었다 : 당신이 인공 기본 키를 사용

Select Sum(SaleAmount) 
From FactSales 
Where StoreNumber = 'S001' 

답변

1

이유는 비즈니스 의사 결정에서 데이터웨어 하우스를 분리하는 것입니다.

귀하의 비즈니스가 성장합니다. 이제 1000 개 이상의 점포가 있습니다. 상점의 키가 변경됩니다. 어떻게 처리합니까?

저장소 키가 데이터웨어 하우스 전체에 퍼져있는 경우 이는 매우 어려운 작업입니다. 저장소 키가 차원 테이블의 특성 일 경우 이는 쉽습니다.

많은 경우 치수는 유형 2 치수 일 수 있습니다. 즉, 시간이 지남에 따라 치수가 변경된다는 의미입니다. 예를 들어 고객은 이름을 변경할 수 있지만 특정 시점의 이름이 무엇인지 알고 싶을 수 있습니다.

그리고 세 번째 이유. 인공 기본 키는 일반적으로 정수입니다. 이것은 문자열 (특히 길이가 가변 인 문자열)보다 색인 생성에 좋습니다. 성능의 차이는 작지만 기본 키를 사용하는 이유입니다. 사실, 키가 문자열이고 정수보다 길면 공간 측면에서 인공 키를 사용하는 것이 더 효율적일 수 있습니다.

+0

응답 해 주셔서 감사합니다. 네, 정수 기본 키를 사용하는 이유를 이해합니다.그러나 그렇게함으로써 성능 차이가 있는지 궁금 할뿐입니다. 또는 우리가 (더 나은 단어 부족) 데이터 관리의 이유로 성능을 많이 포기한다면. 내가 이해하는 것이 중요합니다. 다시 말하지만, 전반적인 장단점을 파악할 수 있도록 성능 저하를 줄이려고합니다. – ptownbro

+0

Oracle을 사용하는 경우 기본 키에 사용할 수있는 여러 데이터 유형간에 성능 차이가 거의 없습니다. 한 가지 예외가 있다면 시간 차원에 대한 DATA 데이터 시간을 사용하도록 제안하는 것입니다 (있는 경우). 적절한 실행 계획을 세우는 것이 더 중요합니다. – BobC

+0

감사합니다. 도와 주셔서 감사합니다. – ptownbro