문제

우리는 복잡한 데이터 축적을하고 있습니다. 우리 고객은 두 차원 (시간 및 사업부)을 포함하는 몇 가지 물건을 보냅니다. 시간은 대부분 1 년입니다. 사업부 차원에는 이름과 BU가보고 및 분석 목적으로 속할 수있는 몇 가지 범주가 있습니다.

그들이 우리에게 보내는 물건에는 현재 상태 정보 (날짜 및 코드)가 포함됩니다. 이것들은 사실처럼 보입니다. 또한 사업부와의 관계를 특징 짓는 정보 (주로 추가 코드)를 보냅니다. 다시 말하지만, 이들은 사업부와 기간에 고유합니다.

마지막으로, 그들은 분명히 부가적인 사실 인 것을 우리에게 보냅니다. 여기에는 적절한 단위가있는 통화 및 카운트가 포함됩니다.

이 질적 정보가 부가적인 사실과 함께 단일 사실 테이블에 정통해야합니까? 아니면 정 성적 물건 (수와 함께 사용할 수 있음)을 정량적 물건 (합으로 사용할 수 있음)과 분리해야합니까?

도움이 되었습니까?

해결책

사실 테이블 만 퇴보하는 경우에만 물건을 넣으십시오 (차원에서 팩트 테이블과의 1-1 관계로 차원을 차지하는 차원에서 높은 신경/고유성 문제가 발생 함). Kimball은 사실 (예 : 고유 주문 번호)과 함께 치수를 퇴화시키는 것 외에는 아무것도 넣는 유혹을 피할 것을 권장합니다.

Kimball이 "정크"차원이라고 부르는 것에 항상 이것을 넣을 수 있습니다. 이러한 모든 코드는 단순히 쓰레기 차원으로 묶을 수 있습니다. 대부분의 날짜는 특정 역할에서 날짜 차원의 키로 사실 테이블에 들어갑니다 (일반적으로 yyyymmdd 양식의 자연스러운 int 키 - 비 식별성 무의미한 대리 키를 사용하지 않는 유일한 시간 중 하나).

나는 별을 모든 사실과 어떤 열이 편의에 의해 단순히 결정되는지를 순진하게 보는 것을 좋아합니다. 반드시 특정 비즈니스 엔티티에 해당하는 것으로 간주해서는 안됩니다. Star는 ERD 스타일 정규화 된 OLTP 데이터베이스가 아닙니다.

다른 팁

데이터가 부가적인 사실과 직접 관련되어 있고 그룹화/정렬/검색을 원하는 것이 아니라면 사실 테이블에 넣는 것은 괜찮습니다.

그러나 사실 테이블의 비 첨가 데이터는 롤업을 방지하거나 손실 된 작업이 될 것임을 알고 있어야합니다.

브래드 윌슨 (Brad Wilson)은 사실 테이블에 추가 할 위험을 정확하게 설명합니다. 과거에는 나중에 리팩토링을 필요로하기 위해 사실 테이블에 정크 속성을 추가했습니다.

그들이 우리에게 보내는 물건에는 현재 상태 정보 (날짜 및 코드)가 포함됩니다. 이것들은 사실처럼 보입니다. 또한 사업부와의 관계를 특징 짓는 정보 (주로 추가 코드)를 보냅니다. 다시 말하지만, 이들은 사업부와 기간에 고유합니다.

날짜는 어떤 비즈니스 목적을 제공합니까? Offhand, 나는 이것들을 그들 자신의 차원으로 만드는 것이 좋으며 정확하게 설명하는 것이 좋습니다.

추가 코드는 얼마나 변동성이 있습니까? 사실 테이블의 곡물이 날짜이고 BU 인 경우, 왜 BU 차원에 포함되어 천천히 변화하는 속성으로 취급 할 수 없습니까?

더 자세한 내용이 없으면 확고한 추천을 할 수는 없지만 이것이 제가 스스로에게 묻는 첫 번째 질문이 될 것입니다.

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