데이터웨어 하우스에서 다 대다 관계를 구현하는 몇 가지 방법은 무엇입니까?


25

데이터웨어 하우스 모델링 (Star, Snowflake)의 주요 토폴로지는 일대 다 관계를 염두에두고 설계되었습니다. 이러한 모델링 체계에서 다 대다 관계에 직면하면 쿼리 가독성, 성능 및 구조가 심각하게 저하됩니다.

데이터웨어 하우스에서 차원 간 또는 팩트 테이블과 차원간에 다 대다 관계를 구현하는 방법에는 무엇이 있으며 필요한 세분성 및 쿼리 성능과 관련하여 어떤 타협이 발생합니까?


질문을보다 명확하게 설명해야합니다. 이것이 4 일 이후 아무도 응답하지 않은 이유 일 수 있습니다. 내 답변에 대한 귀하의 답변은 귀하의 원래 질문과 다릅니다.
IamIC

@IanC 편집. 더 낫습니까?
Brian Ballsun-Stanton

perfect :)
IamIC

답변:


17

내 경험상 재귀 계층은 이것을 다루는 가장 실용적인 방법입니다. 다음과 같은 장점이 있습니다.

  1. 무제한 깊이.
  2. 컴팩트 함.
  3. 적응성.
  4. 속도.

반대로 각 수준의 "대다"조인마다 추가 테이블이 필요합니다. 이것은 하드 코딩되어 스키마 업데이트에 대해 유지 관리하기가 어렵습니다.

필터링 된 인덱스를 사용하면 큰 계층 적 조인 테이블이 전용 테이블보다 뛰어난 속도로 수행 될 수 있습니다. 그 이유는 각 조인이 "테이블을 데이터 테이블에 조인"하는 것과 비교하여 "부모 자식"이기 때문입니다. 후자는 처리하고 저장할 인덱스가 더 많습니다.

나는 수년 동안이 문제를 해결하려고 노력해 왔습니다. 최근에 이것이 내가 생각해 낸 것입니다.


1
"다대 다를 모델링하는 방법에는 무엇이 있으며 성능 및 세분성에 어떤 영향이 있습니까?" 나는 모델링에 대답했다. 투표를 할 필요가 없습니다.
IamIC

4
필요한 것에 대한 더 많은 데이터를 제공해야합니다. 재귀 계층 구조를 통해 언급 한 정확한 문제를 극복했습니다. 그러나 데이터와 관련 정보를 알지 못하면 대답하기가 매우 어렵습니다.
IamIC

2
예, 그들은 이것을 기본적으로 모델링하지 않습니다. 테이블과 조인을 하나 더 추가하여 다대 다를 달성하는 데 무엇이 문제가됩니까? RDBMS에서는 테이블을 구성하는 방법에 관계없이 다 대다에 대한 2 개의 조인이 있습니다. 바로 가기가 없습니다. 유일하게 가능한 예외는 PostgreSQL 또는 Caché / M의 배열입니다.
IamIC

1
(재귀 계층은 실제로 좋은 생각입니다.) 문제를 해결하는 한 가지 방법은 차원 내에서 가능한 다 대다 관계 목록을 미리 계산하여 일반 차원 테이블을 참조한 다음 팩트 테이블을 조인하는 것입니다. 요약 된 차원 테이블. "재귀 계층 구조"에 대한 귀하의 답변은 또 다른 유용한 설계 답변입니다. 이 다양한 핵의 성능에 대한 연구가 있었는지 궁금합니다.
Brian Ballsun-Stanton

3
@Brian은 유용한 답변에 대한 투표를 잊지 않습니다. 커뮤니티를 만드는 데 도움이됩니다. 귀하의 질문에 대답하기 위해 "재귀 적 CTE 또는 수동 트리 빌드?"를 제외하고는 이러한 핵에 대한 연구를하지 않았습니다. 앞서 언급 한 솔루션이 적합합니다. 인덱스 뷰와 결합 할 것입니다. 물론 올바른 미리 채워진 관계 맵이 항상 있습니다.
IamIC

6

데이터웨어 하우스 모델에서 M : M 관계에 대한 일부 시나리오

대부분의 OLAP 서버 및 ROLAP 시스템에는 현재 M : M 데이터 구조를 처리 할 수있는 방법이 있지만 이에주의해야 할 몇 가지주의 사항이 있습니다. M : M 관계를 구현하는 경우보고 계층과 지원하려는 도구를 주시해야합니다.

시나리오 1 : 팩트 테이블에 대한 M : M 차원

모터 정책에 여러 드라이버가있을 수 있습니다. 드라이버를 추가하거나 제거하면 정책 조정 트랜잭션이 조정에 따라 변경되는 드라이버 목록과 관계가있을 수 있습니다.

옵션 1-M : M driver-fact 브리지 테이블 지정된 정책에 대해 드라이버 x 트랜잭션 행이 있으므로 상당히 많은 양의 데이터가 있습니다. SSAS는이 데이터 구조를 직접 사용할 수 있지만 ROLAP 도구를 통한 쿼리 속도가 느립니다.

M : M 관계가 팩트 행과 관련된 엔티티 (예 : 자동차 운전자)를 기반으로하는 경우 ROLAP 도구에도 적합 할 수 있습니다. ROLAP 도구가 M : M 관계를 지원하는 경우 (예 : 비즈니스의 컨텍스트 사용) 사물).

옵션 2-더미 '조합'차원 테이블 공통 코드 목록을 팩트 테이블에 맵핑하는 경우 (즉, 연결된 엔티티가 팩트 행에 고유하지 않은 경우) 데이터 볼륨을 줄이는 다른 방법을 사용할 수 있습니다. 이 유형의 시나리오의 예는 입원 환자 방문의 ICD 코드입니다. 각 입원 환자 방문에는 하나 이상의 ICD 진단 및 / 또는 절차가 나와 있습니다. ICD 코드는 글로벌 코드입니다.

이 경우 각 사례에서 코드 조합의 고유 목록을 구성 할 수 있습니다. 각 개별 조합에 대해 하나의 행으로 차원 테이블을 작성하고 ICD 코드 자체에 대한 조합과 참조 테이블 사이에 링크 테이블을 작성하십시오.

팩트 테이블에는 '조합'차원에 대한 차원 키가있을 수 있으며 차원 행에는 실제 ICD 코드에 대한 참조 목록이 있습니다. 대부분의 ROLAP 도구는이 데이터 구조를 사용할 수 있습니다. 도구가 실제 M : M 관계에서만 작동하는 경우 팩트와 코딩 참조 테이블 간의 M : M 관계를 에뮬레이트하는보기를 작성할 수 있습니다. 이것은 SSAS에서 선호되는 접근 방식입니다.

옵션 1의 장점 : -M : M 테이블을 통해 특정 관계가있는 팩트 테이블 행을 선택하는 것을 기반으로하는 적절하게 인덱스 된 쿼리가 상당히 효율적일 수 있습니다.

  • 약간 더 간단한 개념적 모델

옵션 2의 장점 : -데이터 스토리지가 더 컴팩트합니다

  • 조합을 사람이 읽을 수있는 형식으로 '콤비네이션'차원의 코드로 표시하여 직선 1 : M 관계를 에뮬레이션 할 수 있습니다. 이는 M : M 관계에 대한 지원이없는 멍청한보고 도구에서 더 유용 할 수 있습니다.

시나리오 2 : 차원 간의 M : M 관계 :

유스 케이스를 생각하기는 어렵지만 ICD 코드를 사용하여 건강 관리에서 무언가를 상상할 수 있습니다. 비용 분석 시스템에서 입원 환자 방문은 차원이 될 수 있으며 방문 (또는 NHS- 말하기의 컨설턴트-에피소드)과 코딩 사이에 M : M 관계를 갖습니다.

이 경우 M : M 관계를 설정하고 기본 차원에서 사람이 읽을 수있는 렌더링을 체계화 할 수 있습니다. 관계는 직선 M : M 링크 테이블 또는 전과 같이 브리징 '조합'테이블을 통해 수행 할 수 있습니다. 이 데이터 구조는 Business Objects 또는보다 우수한 품질의 ROLAP 도구를 통해 올바르게 쿼리 할 수 ​​있습니다.

내 머리 꼭대기에서, SSAS가 팩트 테이블과의 관계를 바로 잡지 않고 이것을 소비 할 수 없다는 것을 알 수 없으므로 코딩과 팩트 테이블 사이의 M : M 관계에 대한 견해를 제시해야합니다 이 데이터에 SSAS를 사용하는 행.


5

트랜잭션 시스템이나 현재 데이터 모델과 같이 모델에서 어떤 종류의 다 대다 관계를 염두에두고 있는지 정확히 알고 싶습니다.

일반적으로 차원 간의 다 대다 관계는 차원에 대한 사실입니다. 고객이 여러 고객에게 서비스를 제공하는 여러 지사에서 주문한다는 사실. 그 각각은 사실입니다. 그것은 효과적인 날짜 또는 그와 비슷한 것을 가질 것이지만, 관계는 "사실"일 수 있습니다. 관계 자체는 고객 및 지사 외에 다른 차원을 가질 수 있습니다. 따라서 중심에 (실제로 사실이 아닌) 팩트 테이블이있는 일반적인 스타 스키마입니다. 이 별이 창고의 다른 차원 별들과 어떻게 관련 될 수 있는지는 분명히 달려 있습니다. 다른 별을 결합 할 때마다 비즈니스 키를 사용하여 실수로 교차 조인을 수행하지 않도록해야합니다.

일반적으로 이러한 차원 관계 테이블은 더 큰 팩트 테이블과 같은 정도로보고하지 않으며, 그렇게 할 때 항상 많은 양의 데이터는 아니므로 성능에 영향을 미치지 않는 경향이 있습니다. 위의 경우 시간이 지남에 따라 고객 / 지점 활용도를 볼 수 있지만 실제 주문 수량에 대한 더 나은 데이터는 주문 팩트 테이블에서 사용 가능하며, 이는 아마도 고객, 지사 등의 차원도있을 수 있습니다. 대부분의 사람들은 다대 다를 고려할 것이지만 (고객에서 지점까지 다 대다 관계를 정의하기 위해 주문을 고려할 수 있지만) 데이터웨어 하우스 환경에서 더 일반적입니다. 해당 관계 수준 (예 : 고객, 지점, 월)에 요약 정보를 롤업 한 경우 다 대다 모델에 대해서만 숫자 집계를 수행 할 수 있습니다.


좋은 대답입니다. 내가 여기에서 탐색하고있는 두 가지 경우가 있습니다. 사실과 차원 사이의 N : M, 사실, 차원과 차원 사이의 1 : N : M
Brian Ballsun-Stanton

3
@Brian Ballsun-Stanton 사실과 차원 사이에 N : M이라고 말할 때, 주어진 사실에는 질문의 태그처럼 모두 적용되는 구별되지 않고 다양한 카디널리티 형제 차원이 있다는 것을 의미합니까? 따라서 하나의 질문 (사실)에는 sql-server, data-warehouse 태그가 지정되고 다른 질문에는 data-warehouse, sql-server, 비즈니스 인텔리전스 태그가 지정됩니다. 나는 여전히 태그 할당 사실 (질문 사실과 약간 다른 결정을 가짐)에 대해 별표로 가져옵니다. 인덱싱 가능성이 높으며 치수 변화를보다 분명하게 포착 할 수 있습니다.
Cade Roux

@Brian Ballsun-Stanton 1 : N : M은 눈송이라고 생각합니다. 피하는 경향이 있습니다. 치수 간의 관계에 대해 다른 별 (또는 교량)을 정의하려면 괜찮습니다. 차원 데이터웨어 하우스는 정규화되지 않았으며 무엇보다도 실제 유형 관계를 나타내거나 중복성을 제거하지 않고 특정 유형의 작업을 지원하도록 설계된 실용적인 구조입니다.
Cade Roux

1
@Brian Ballsun-Stanton Kimball 포럼과 툴킷 책에서 bridges and outriggers를 살펴보십시오 : forum.kimballgroup.com/…
Cade Roux

@Cade 그것들을 설명하는 답을 줄 수 있습니까? :)
Brian Ballsun-Stanton

5

다음은 Kimball의 일부 관련 기사와 주어진 다 대다 관계 모델링에 적용될 수있는 기사입니다. 다 대다 관계는 문제 영역 / 논리 모델에서만 개념입니다. 정규화 된 OLTP 모델에서는 링크 테이블을 사용하여 처리 할 수있을 것입니다. 링크 테이블은 물론 각 방법마다 하나씩입니다. 정규화되지 않은 Kimball 데이터웨어 하우스 모델에는이를 수행하는 여러 가지 방법이 있으며, 그 중 하나는 기본적으로 해당 연결 테이블을 별의 중심에있는 사실로 취급합니다. 다른 하나는 플래그 열의 배열입니다.

궁극적으로 선택은 정확히 모델링하는 것, 변경 방법 및보고 방법에 따라 달라집니다. 차원 모델링과 데이터웨어 하우징이 일반적으로 표준화 된 모델과 크게 다른 곳입니다. 표준화 된 모델은 데이터의 논리적 및 이론적 관계에 중점을 둡니다. 데이터웨어 하우징은 항상 실제 사용 사례를 주시하고 비정규 화하여이를 수행합니다.

브릿지 테이블을 사용하여 대체 계층 구조 모델링 :

http://www.kimballgroup.com/wp-content/uploads/2012/05/DT62Alternative.pdf

다 대다 관계에 대한 세 가지 옵션 (숫자 공유 할당과 연결됨-흥미로운 부분에 대한 주석 참조)

http://www.pythian.com/news/364/implementing-many-to-many-relationships-in-data-warehousing/

불행히도 많은 Kimball 's Information Week / DBMS 잡지 기사에는 더 이상 좋은 링크가 없습니다 ...


'대체 계층 구조'기사에 대한 링크가 손상되었습니다. 어쩌면 당신이 언급하는 : kimballgroup.com/html/designtipsPDF/DesignTips2004/...
앤디 Tjahjono

많은 기사 에 대한 링크를 주셔서 감사합니다 . 내 '아하!' 그것에서 순간.
Endy Tjahjono

두 번째 링크는 죽었습니다. 다음은 동일한 기사에 대한 최신 링크입니다. 그러나 다소 왜곡되어 어느 시점에서 모든 그래픽이 손실됩니다. blog.pythian.com/…
posfan12

1

이 문제를 해결할 수있는 한 가지 방법은 팩트 테이블에 2 개의 열이 있고 2 차원의 외래 키는 다 대다 관계 선박을 갖는 것입니다.


1
문제가 어떻게 해결됩니까?
Brian Ballsun-Stanton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.