2017-02-27 27 views
0

對於數據庫和SQL來說,我非常新,並且有一個非常重要的任務,我不知道該如何解決。在MySQL中創建「DWH like」星型模式

鑑於我有一家擁有三家不同子公司(子A,子B,子C)的公司(A公司)。所有這三個子公司產生可分爲三大產品類別相同的產品:

  • 產品類別的
  • 產品B類
  • 產品C類

我的任務是創建一個明星的方案,可以獲得以下信息:產品類別B中每種產品的子A和子B的總收入。

所需的結果格式t是包含三列「子公司名稱」,「產品名稱」和「收入」的表格。

到目前爲止,我一直在試圖做的是創建以下事實表,維和鍵。 尺寸的主鍵連接到我的事實表的外鍵。

Structure Approach

所以我的問題是:

  • 難道我甚至在正確的軌道或者是這種方法完全錯了嗎?

  • 我怎樣才能用示例數據「填充」我的表格以便能夠編寫一個查詢來回答上面給出的問題?

  • 這樣的查詢將如何看起來像?

現在,我使用與XAMPP創建一個本地MySQL服務器和我連接到該用的IntelliJ IDEA終極2016年diagramm上面還蜜蜂使用該軟件創建的。

我希望有人能夠和願意幫助我。

此外,請原諒任何錯誤(或請告訴我我做錯了什麼),因爲我都是SQL新手,尤其是新的Stackoverflow。

親切的問候

編輯:

我用不同的工具來創建和可視化我的表。另外,正如Fenix提到的,我添加了幾個不同的維度,例如時間/日期表。然而,爲了解決我的任務,我想我只需要dimCompany(代表不同的子公司)和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;

不幸的是,一些數據集市沒有得到很好的結構,因此不包含參照完整性(反模式),所以你將不得不用LEFT JOIN而不是INNER JOIN。請注意,INNER JOINJOIN相同。有點大約JOIN你可以想像here

編輯:

關於你的評論,這是很難做出很好的平衡沒有做出這樣的回答過於籠統,因爲這QA網站應該服務於特定的問題和答案。

由於DWH仍然是一個數據庫,它繼承了大部分數據庫原理。其中一個是桌子鑰匙。主鍵是唯一行標識符,並且當數據庫設計允許(在DWH世界中它總是應該)鍵是整數(正好是大整數)。有關更多信息,請參閱this

目的?您可以擁有兩個名稱相同但狀態不同的公司,因此您需要一些密鑰來區分它們。

爲什麼它應該是整數?這是更多的技術問題,並且一個的答案是查詢優化。 CPU將比兩個整數(4或8個字節)快得多,而不是字符串(數據庫世界中的VARCHAR)與100個字節(或您指定的)相匹配。

爲什麼有人用VARCHAR作爲主鍵?那麼,有時候,儘可能原生是一種好方法。因此,VARCHAR產品主鍵可能是產品品牌和計數器(來自供應商)的組合,如果您是轉銷商,ERP可能會給予MCR-OFF-123這樣的密鑰。在DWH中,建議存儲本地密鑰(無論它是什麼,int或varchar)並分配代理主鍵。

分,A具有鍵 '1',次B具有關鍵「從您的評論2

報價。

是的,你是對的。

+0

首先:非常感謝您的快速回答!我編輯了我的原始文章,以包含更詳細的數據模式方法。不過,我仍然對此有疑問。雖然我確實理解使用主鍵和外鍵連接表的總體思路,但我無法想象這樣的KEY究竟會如何。假設我們有Sub A,Sub B和Sub C,這些是關鍵字嗎?或者他們獲得唯一的密鑰? (就像Sub A的關鍵字'1',Sub B的關鍵字'2'...)同樣是產品。 –

+0

嘿,我根據你的評論擴展了我的答案:-)如果你有任何關於密鑰和數據庫的東西的其他問題,請問另一個問題,如果它還沒有回答。你的基本問題是好的,所以保持它的具體可以幫助其他人。 – fenix

+0

再次感謝。我已經接受了你的回答,因爲它已經幫了我很多。然而,我仍然沒有完全達到我的要求,但我想我會想方設法。如果沒有,我可以與您聯繫以獲得更具體的幫助,而不會將論壇「發送垃圾郵件」? –