2017-02-27 3 views
0

저는 데이터베이스와 SQL 전반에 대해 처음 접했고 해결 방법을 모르는 꽤 중요한 작업을했습니다.MySQL에서 "DWH like"스타 스키마 만들기

나는 세 개의 다른 자회사 (Sub A, Sub B, Sub C)가있는 회사 (회사 A)가 있다고 가정하면. 모든 3 개 자회사는 세 가지 제품 범주로 나눌 수 있습니다 같은 제품을 생산 :

  • 제품 카테고리
  • 제품 카테고리 C

내 작업이 별을 생성하는 것입니다

  • 제품 카테고리 B 나는 다음과 같은 정보를 얻을 수 있습니다 : 제품 카테고리 B.에서 모든 제품에 대한 하위 A와 하위 B의 총 수익

    필요한 형식의 t는 세 개의 열 "보조 이름", "제품 이름"및 "수익"을 포함하는 테이블입니다.

    지금까지 내가 해왔 던 것은 다음의 사실 테이블, 차원 및 키를 만드는 것입니다. 차원의 기본 키가 사실 테이블의 외래 키에 연결됩니다.

    Structure Approach

    그래서 제 질문은 다음과 같습니다

    • 나는 심지어 궤도에 건가요 또는이 방식은 완전히 잘못입니까?

    • 위의 질문에 답하는 쿼리를 작성하려면 예제 데이터로 실제로 테이블을 "채우는"방법은 무엇입니까?

    • 그런 쿼리는 어떻게 생겼을까요? 지금은

    , 내가 XAMPP로 만든 로컬 MySQL 서버를 사용하고 있습니다 및 Diagramm 사용 위 또한 꿀벌이 소프트웨어를 사용하여 만든이 사용하게 IntelliJ IDEA 궁극적 인 2016에 연결하고있다.

    누군가가 나를 도울 수 있기를 바랍니다.

    또한 SQL을 처음 접했고 특히 Stackoverflow를 처음 사용하면서 실수를 용서해주십시오.

    종류에 관해서

    편집 : 내 테이블을 생성하고 시각화하기 위해 다른 도구를 사용하고

    . 또한 fenix에서 언급했듯이 시간/날짜 표와 같은 몇 가지 다른 차원을 추가했습니다. 그러나, 내 작업을 해결하기 위해 dimCompany (다른 자회사를 나타내는 Dimension)와 dimProduct 만 필요하다고 가정합니다. enter image description here

  • 답변

    1
    • 당신은 그 길을 잘 알고 있습니다. 데이터 마트가 어떻게 구성되어야하는지에 대한 학교 예. 실제 예제에는 companyID, productID 및 salesID의 원시 키가 포함될 수 있습니다. PK_sales 또는 PK_fact를 원하는대로 추가하십시오.날짜 또는 타임 스탬프가없는 이벤트 (하나의 판매)는 거의 발생하지 않지만 이것이 개념의 일부 증거 일 뿐이라면 어쩌면 당신은 그것없이 갈 수 있습니다.
    • 데이터가 있습니까? 아니면 데이터를 구성하고 싶습니까?
      1. RANDBETWEEN 기능을 사용하여 Excel에서 일부 예제 데이터를 만들 수 있습니다.
      2. 많은 MySQL 클라이언트 도구에는 excel, csv 또는 txt 파일에서 데이터를 가져 오는 옵션이 있습니다.
      3. 또는 Pentaho KettleTalend Open Studio과 같은 무료 데이터 통합 ​​도구를 사용할 수 있습니다. 이 순간에 너무 많은 경우이 단계를 피하십시오. 그러나 DI 도구가 무엇인지, 그리고 DWH를 어떻게 채울 수 있는지에 대한 좋은 통찰력을 줄 것입니다 (실제 예제에서).
    • 그것은이 같은 것입니다 :

    SELECT dp.ProductName,sum(fs.revenue) as total_revenue FROM fact_sales fs JOIN dim_product dp ON fs.FK_Product = dp.PK_Product JOIN dim_company dc ON fs.FK_Company = dc.PK_Company WHERE dp.Product_Type = 'Product Category B' AND dc.CompanyName IN ('Sub A','Sub B') GROUP BY dp.PK_Product;

    은 참조 무결성 (안티 패턴)을 포함하지 않는 불행하게도, 데이터 마트의 일부가 잘 구조화되지 않은, 당신 때문에 INNER JOIN 대신 LEFT JOIN을 사용해야합니다. INNER JOINJOIN과 같습니다. 조금 JOIN에 대해 here을 시각화 할 수 있습니다.

    편집 : 귀하의 코멘트에 대해서는

    ,이 QA 사이트가 특정 질문에 대한 답변을 위해 봉사해야하기 때문에이 대답은 너무 광범위하고 싶지 않아 균형을 어렵다.

    DWH는 여전히 데이터베이스이므로 대부분의 데이터베이스 원칙을 상속합니다. 그 중 하나가 테이블 키입니다. 기본 키는 고유 한 행 식별자이며 데이터베이스 디자인에서 허용되는 경우 (DWH 세계에서 항상 필요함) 키는 정수 (정확하게 큰 정수)입니다. 자세한 내용은 this을 참조하십시오.

    목적? 이름이 같지만 상태가 다른 두 회사가있을 수 있으므로 별개의 열쇠가 필요합니다.

    왜 정수 여야합니까? 그것은 더 기술적 인 질문이며, 중 하나는 쿼리 최적화의 답변입니다입니다. CPU는 100+ 바이트 (또는 지정) 문자열 (데이터베이스 세계의 VARCHAR)보다 훨씬 빠르게 두 개의 정수 (4 또는 8 바이트)를 일치시킵니다.

    누군가 VARCHAR을 기본 키로 사용하는 이유는 무엇입니까? 글쎄, 때로는 원산지가되는 것이 좋은 접근법입니다. 따라서 VARCHAR 기본 키는 제품 브랜드와 카운터 (공급 업체)의 조합 일 수 있으며 재 판매자 인 경우 ERP는 MCR-OFF-123과 같은 Microsoft Office 2016 키를 제공 할 수 있습니다. DWH에서는 원시 키 (int, varchar)를 저장하고 서로 게이트 기본 키를 할당하는 것이 좋습니다.

    하위 A는 키가 '1', 하위 B 키 '의견에서 2

    인용이있다.

    네, 맞습니다.

    +0

    우선 : 빠른 답변을 보내 주셔서 감사합니다.원본 스키마를 편집하여 데이터 스키마에 대한보다 자세한 접근법을 포함 시켰습니다. 그러나 나는 아직도 이것에 대해 몇 가지 질문을 가지고있다. 기본 키와 외래 키를 사용하여 테이블을 연결하는 일반적인 개념을 이해하고 있지만 키가 실제로 어떻게 보이는지 생각할 수 없습니다. Sub A, Sub B, Sub C가 있다고 가정합시다.이 이름들이 열쇠입니까? 아니면 고유 한 키를 얻나요? (서브 A와 마찬가지로 키 '1', 서브 B는 키 '2'...) 제품과 동일합니다. –

    +0

    안녕하세요, 귀하의 의견에 따라 답변을 확장했습니다 :-) 키와 db 관련 문제가 더 있으시면 아직 답변되지 않은 경우 다른 질문을하십시오. 기본 질문은 좋으므로 특정 질문을 유지하면 다른 사람들에게도 도움이 될 수 있습니다. – fenix

    +0

    다시 고맙습니다. 이미 도움이 되었기 때문에 대답을 받아 들였습니다. 그러나, 나는 아직도 내가해야만하는 것을 달성하지 못했지만 나는 어떻게 든 그것을 이해할 것이라고 생각한다. 그렇지 않다면 포럼을 "스팸"하지 않고 좀 더 구체적인 도움을 요청할 수 있습니까? –