0

식당 영업 거래에 대한 팩트 테이블을 설정하고 싶습니다. 전체 팩트 테이블을 추가하면 레스토랑 전체에서 전체 판매가 이루어집니다. 레스토랑에는 음식과 음료의 두 가지 주요 수입원이 있습니다. 각각의 치수는 매우 다릅니다.차원 모델링 - 일관성없는 차원이있는 사실로 단일 사실 테이블을 처리하는 방법?

예를 들어, 음식은 유제품이 없는지, 글루텐이 없는지 등을 추적 할 수 있습니다. 또는 음식이 이탈리아어인지, 프랑스어인지를보고 싶을 수도 있습니다. 와인의 경우, 포도주는 포도주, 포도주는 포도주, 포도주는 포도주,

하나의 사실 테이블을 사용하여 어떻게 수행합니까? 항목이 음식 인 경우 NULL 인 Wine 차원과 와인이 항목 인 경우 NULL 인 Food 차원을 가지고 있어야합니까?

+0

데이터베이스 정규화는 어떻습니까? 일반적으로 모든 필드를 포함하는 거대한 테이블을 가지고있는 것은 좋지 않습니다. – gtgaxiola

+0

이것은 상대적으로 정규화되어있을 것입니다 (별표 구조) ...이 상황에 대한 '우수 사례'가 무엇인지 궁금합니다. 매우 일반적이라고 확신합니다 –

+0

@gtgaxiola 스타 스키마는보고를 위해 비정규 화 된 구조입니다! 그들을 정상화하라는 충고에 저항해야합니다! 사실 테이블은 어쨌든 각 차원의 열쇠가 될 것입니다. 심지어 수백만 개의 행도 완벽하게 괜찮습니다. –

답변

1

사실이 사실은 다음과 같습니다. 당신은 많은 사람들이 특정 와인을 주문하는 방법을 판매 사실에서보고 할 경우에주의를 집중해야 할 곳

SALES_LINE_ITEM_FACT 
    TRAN_DATE 
    TRAN_HOUR (or other time buckets if needed) 
    SERVER_KEY 
    TABLE_KEY 
    SEAT_KEY 
    PROMOTION_KEY 
    PRODUCT_KEY 
    REGULAR_PRICE 
    NET_SALE_PRICE 
    PRODUCT_COST 

귀하의 "제품"차원이다. , 더 자세한 분석을 수행하려는 경우 당신은 카테고리 계층 구조의 다른 수준으로 상세 정보를 추가하거나, 수 중

PRODUCT_DIM 
    PRODUCT_KEY 
    PRODUCT_NAME 
    PRODUCT_CATEGORY (food/beverage) 
    PRODUCT_SUBCATEGORY (wine/beer/dairy/french/italian etc) 
    CURRENT_AVERAGE_PRODUCT_COST 

에 대한 특정 눈송이를 만듭니다 시작하려면

, 그냥 같은 것을 보일 수 있습니다 특정 제품 유형을 선택하고 제품에 연결하십시오.

+0

정말로 "FOOD"과 "BEVERAGE"차원으로 제품을 분리 할 수 ​​있다면 사실에 해당하는 항목을 null로 지정하십시오. 그러나 이렇게하면 두 사람의 공통점을 잃을 수 있습니다 (아마도 음식과 음료의 일부를 제공하는 "공급 업체"가 있습니까?) –