私は、典型的なスター スキーマを含むデータ ウェアハウスと、次のようなことを行う一連のコードを持っています (明らかに、はるかに大きくなりますが、これは説明用です)。
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
には一意の列名が含まれている必要があり、オプティマイザーのパフォーマンスについても懸念があります。なぜなら、さまざまなファクトとディメンションにわたる WHERE 句のすべての項目が最適化されることが懸念されるからです。 、ビューは星全体に渡って表示されるため、ビューをパラメーター化することはできません (少年、それはクールではないでしょうか!)
だから私の質問は -
このアプローチは問題ありませんか、それともパフォーマンスを低下させ、より優れた構文しか提供しない抽象化になるだけですか?
適切な PK と FK がすべて配置されている場合、これらのビューをコード生成し、列名の重複を排除する (後でビューを手動で調整する必要がある場合でも) 最善の方法は何ですか? から引き出すためにSQLを書くだけですか、
INFORMATION_SCHEMA
それともすでに利用可能な良い例がありますか。
編集:私はそれをテストしましたが、パフォーマンスは、より大きなプロセスでも同じように見えます-それぞれがこれらのビューを使用する複数のスターに参加しても.
自動化の主な理由は、データ ウェアハウスにこれらのスターが多数あり、FK/PK が設計者によって適切に行われているためですが、すべてのテーブルまたはドキュメントを選択する必要はありません。ビューを生成するためのスクリプトを作成しました (テーブルの略語も生成します)。それは から自動的にスケルトンを生成するのにうまく機能しINFORMATION_SCHEMA
、ビューの作成をコミットする前に微調整することができます。
誰かがコードを欲しがっているなら、私はおそらくここでそれを公開することができます.