我的事實表在他參加的課程中包含用戶分數。我必須在報告中展示的一些課程細節來自多個表格(在實際的OLTP db中)。
我是否在維度表中創建該課程條目的非規範化版本?
還是我只是直接加入事實表的課程表連接,以介紹這門課程(course_type,教師誰創造了這門課程等)如何避免星型模式中的複雜連接?
2
A
回答
1
也許我不明白你的問題的其他表,但一個事實表在星型模式中應該被加入到圍繞它的維度表中。 如果您不想進行連接,只需創建一個視圖,然後使用視圖進行報告。
如果你發佈一個模式(schema),它會更容易發表評論/幫助。
2
Snowflaking或橋接表來使連接更加複雜,並不僅僅是從編碼的角度看,這也使得它成爲BI用戶較少簡單。
在大多數情況下,我會將這些直接放在現有的或附加的維度表中。
例如,你有一個分數的事實表,它在其中可能會或可能不會對用戶持有人口統計維度用戶詳細信息(或許只有一橋)。有時候最好分解出人口統計信息。因此,儘管性別和年齡可能與用戶實體相關聯,但在維度模型中,這些維度可能是單個維度或集中到一個維度 - 這取決於使用場景。
也許你的分數附加到一個州和州有地區(雪花)。將區域維度直接連接起來而不是通過狀態維度可能更有效。
我想你會發現的是,維模型是一個非常務實的非規範化的做法。主要的事情是不可談判的事實 - 之後,維度的選擇非常瞭解數據的行爲,您對常見使用場景的遠見 - 並避免陷入太少維度和太多維度問題。
1
將多個維度合併在一起是常見的做法,犧牲正常化有利於性能。這通常是在你的典型查詢需要所有維度的時候完成的(而不是在不同的用例中使用不同的位)。
還記得,當您收到加入開銷的減少,也有一些缺點:
- 失去彈性,如倉庫擴展
- 全表掃描的時間可能妨礙發展(傳統基於行的RDBMS如SQL Server)
- 磁盤空間的消耗
您必須單獨考慮每種情況。
這可能是值得也考慮創建物化視圖的選擇,如果這種能力是由你的RDBMS提供。
0
我們通常將雪花模式作爲物理DWH設計,但添加了一個報告視圖層,將雪花模式平滑爲星形模式。
這樣,您的OLAP多維數據集就變得簡單多了,而且更容易管理。
相關問題
- 1. 避免SSRS中的複雜連接2008-r2
- 2. CakePHP的:複雜的連接模型
- 3. 複雜連接的模型結構?
- 4. 避免複雜的數Sympy
- 5. Django模型避免重複
- 6. 避免連接中的重複值
- 7. 如何避免連接
- 8. laravel 4 - 某些具有特定連接的模型 - 如何避免重複?
- 9. MySQL數據庫模式的航運路線,避免複雜性
- 10. 避免重複的mysql連接
- 11. 如何避免在java中重複的數據庫連接?
- 12. 複雜類型的模式
- 13. SvcUtil工具跳過WSDL的複雜類型,以避免重複
- 14. 左連接Mulltiple表並避免重複
- 15. 如何避免使用複雜LINQ的EF Core中的RelationalEventId.QueryClientEvaluationWarning?
- 16. 如何避免引導模式中的數據重複問題
- 17. 如何避免Subversion中的複雜合併?
- 18. 如何避免太多的模型類
- 19. 如何避免重複列表中的相同衛星信息?
- 20. Django:擴展避免數據庫連接的用戶模型
- 21. 如何在Hibernate中避免舊式外連接(+)?
- 22. 如何避免spring + hibernate連接太多?
- 23. 如何避免最大連接限制?
- 24. 如何避免太多連接?
- 25. 避免在流星模板助手中重複查詢
- 26. 存在的反模式,如何避免
- 27. JPA標準查詢 - 如何避免重複連接
- 28. 如何在連接兩個表時避免重複值?
- 29. 如何避免反覆連接到數據庫
- 30. 如何在使用簡單連接時避免重複行
我沒有問題,一個單步加入到一個維度。但讓我們說這個維度持有更多的外鍵,這意味着我必須進一步將**維**表連接到某個查找表或更多表。 – 2010-06-30 13:11:07
聽起來像雪花設計。這沒什麼不妥,只要DW設計師有一個堅實的理由爲什麼雪花。 – 2010-06-30 16:10:28