다른 출처에서 사실을 병합합니까? 아니면 별도로로드 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/227990

  •  03-07-2019
  •  | 
  •  

문제

우리는 두 가지 기원을 가진 데이터를 가지고 있습니다. 일부는 고객에게서 나옵니다. 일부는 다른 공급 업체에서 나옵니다. 현재, 우리는이 데이터를 물리적으로 거의 백 열, 수만 개의 행 및 두 차원의 공식적인 분리가없는 거대한 테이블로 "병합"합니다. 결과적으로, 우리는 실제로이 테이블을 많이 사용할 수 없습니다.

이 혼란을 적절하지만 작은 스타 스키마로 재 설계 할 것입니다.

두 차원은 분명합니다. 예를 들어 그들 중 하나는 시간입니다.

고객 지원 데이터는 여러 가지 사실 값을 제공합니다. 각 공급 업체는 동일한 차원에 맞는 추가 사실 값을 제공 할 수 있습니다.

이 사실 데이터는 모두 동일한 세분성을 가지고 있습니다. 우리는 종종 모든 공급 업체로부터 정보를 얻지 못하기 때문에 "스파스"라고 할 수 있습니다.

여기 내 딜레마가 있습니다.

이 사실 테이블은 일부 널이 다른 소스에서 채워 졌습니까?

아니면이 것입니다 N+1 팩트 테이블 - 하나는 고객으로부터 채워졌고, 다른 하나는 각 공급 업체로부터 채워 졌습니까?

각 디자인에는 장단점이 있습니다. "병합"또는 "별도로로드"사이의 선택에 대한 두 번째 의견이 필요합니다.


고객은 거래 종료에 대해 알고있는 수익, 비용, 카운트, 가중치 및 기타 물건을 공급합니다.

공급 업체는 거래 중 일부에 대한 추가 세부 사항 (가중치, 비용, 지속 시간에 대한 추가 세부 사항을 제공합니다. 다른 거래는 공급 업체의 가치가 없습니다.

공급 업체 Two는 거래량, 기간, 길이, 외화율 등 일부 거래에 대한 추가 세부 사항을 제공합니다. 다른 거래는 공급 업체 2에 대한 가치가 없습니다.

일부 거래에는 두 공급 업체가 있습니다. 일부 거래에는 공급 업체가 없습니다.

널이있는 테이블 하나? 세 테이블?

도움이 되었습니까?

해결책

나는 단일 팩트 테이블로 갈 것입니다. 이 접근법의 하이라이트 프로는 쿼리 시간이 아닌로드 타임에 모든 노력을 남기는 것입니다.

다른 팁

당신이 묘사 한 바에 따르면, 그것은 단일 사실 테이블처럼 들립니다.

사실 테이블에는 Time X Transaction X Customer (?)의 곡물이있는 것처럼 들립니다.

나의 이전 질문은 실제로 공급 업체 데이터 중 일부가 자체 차원의 후보인지 알아 내려고 노력하는 것이 었습니다. 나는 그것을 결정하기 위해 당신에게 맡길 것입니다. 그러나 그것은 실제로 그렇게 들리지 않습니다.

널 사실은 (플랫폼에 따라) 집계 중에 경고를 던질 수 있지만, 오해의 소지가있는 0을 채우는 대안은 더 나쁩니다.

나는 두 출처가 같은 곡물을 공유하기 때문에 대답은 하나의 사실 테이블이 있어야한다는 것입니다. 최종 사용자가 정보와 상호 작용하기를 원하는 방법에 대해 생각해보십시오. 그것이 합리적이고 비즈니스 보고서가 해당 데이터를 공동으로 배치하여 혜택을 볼 수 있다면 이것이 귀하의 답변입니다. 사실 테이블의 널을 피하려고 노력하십시오. 0을 입력 할 수 있고 (그리고 제로가 데이터에 대해 의미가 있다면, 즉 온도를 생각한다면) 그렇게하십시오. 그것은 당신의 혼란을 줄이고 Trickynixon이 지적한 것처럼 집계 문제를 일으킬 것입니다.

실제로 당신은 'Brownfield'응용 프로그램에서 큰 지적입니다. 오늘날 존재하는 내용을보고 경험을 활용하여 더 나은 디자인을 만들 수 있습니다. 이것은 DW의 수명이 바뀌지 않을 최고의 곡물을 선택하는 가장 중요한시기입니다.

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