我有一個包含典型的星型架構數據倉庫,以及一大堆的代碼,做這樣的東西(顯然大了很多,但這是舉例):典型的Kimball星型模式數據倉庫 - 模型視圖可行嗎?以及如何代碼生成
SELECT cdim.x
,SUM(fact.y) AS y
,dim.z
FROM fact
INNER JOIN conformed_dim AS cdim
ON cdim.cdim_dim_id = fact.cdim_dim_id
INNER JOIN nonconformed_dim AS dim
ON dim.ncdim_dim_id = fact.ncdim_dim_id
INNER JOIN date_dim AS ddim
ON ddim.date_id = fact.date_id
WHERE fact.date_id = @date_id
GROUP BY cdim.x
,dim.z
我想以期替換它(MODEL_SYSTEM_1
,說的),使之成爲:
SELECT m.x
,SUM(m.y) AS y
,m.z
FROM MODEL_SYSTEM_1 AS m
WHERE m.date_id = @date_id
GROUP BY m.x
,m.z
但有一種觀點MODEL_SYSTEM_1
必須包含唯一的列名,我還擔心與優化,如果我表現繼續做吧,因爲我擔心WH中的所有項目在不同的事實和維度ERE條款得到優化,因爲認爲要橫跨整個明星,意見不能被參數(男孩,那不是很酷!)
所以我的問題是 -
這種方法行得通嗎?或者它只是一個抽象,會傷害性能,除了更好的語法之外,不會給我任何東西?
考慮到所有適當的PK和FK都存在,對這些視圖進行編碼的最佳方式是什麼?消除重複的列名稱(即使稍後需要手動調整視圖)?我是否應該寫一些SQL將其從
INFORMATION_SCHEMA
中提取出來,或者有一個很好的示例。
編輯:我已經測試過它,而且性能似乎是相同的,甚至更大的過程 - 甚至在加入多顆,每個使用這些視圖。
自動化主要是因爲數據倉庫中有許多這些星星,設計師已經正確地完成了FK/PK,但是我不想挑選所有的表或者文檔。我編寫了一個腳本來生成視圖(它也會生成表格的縮寫),並且它可以很好地從INFORMATION_SCHEMA
自動生成框架,然後可以在提交視圖創建之前對其進行調整。
如果有人想要代碼,我可以在這裏發佈它。
我沒有跟隨這 - 如果我壓扁全明星成有效的表索引的不同的方式,什麼是三維模型擺在首位的地步? – 2008-09-24 17:55:59
不扁平化,捲起來。如果您要彙總數據,則應考慮實現視圖。這會更快。 – ConcernedOfTunbridgeWells 2008-09-24 18:55:21