2017-06-07 15 views
0

私は次元テーブルといくつかのアウトリガーを持っています。複数のアウトリガーテーブルを1つにまとめる?

create table dimFoo (
    FooKey int primary key, 
    ...... 
) 

create table triggerA (
    FooKey int references dimFoo (FooKey), 
    Value varchar(255), 
    primary key nonclustered (FooKey, Value) 
) 

create table triggerB (
    FooKey int references dimFoo (FooKey), 
    Value varchar(255) 
    primary key nonclustered (FooKey, Value) 
) 

create table triggerC (
    FooKey int references dimFoo (FooKey), 
    Value varchar(255) 
    primary key nonclustered (FooKey, Value) 
) 

これらのアウトリガーテーブルを1つのテーブルにマージする必要がありますか?

create table Triggers (
    FooKey int references dimFoo (FooKey), 
    TriggerType varchar(20), // triggerA, triggerB, triggerC, etc.... 
    Value varchar(255), 
    primary key nonclustered (FooKey, TriggerType, Value) 
)   
+0

私は彼らがアウトリガーである理由を理解したいと思います。それらは、ディメンションテーブル自体(FooKeyでキー入力されている)と一対一で対応するテキストフィールドのように見えます。 – Rich

+0

各fooには多くのテキスト項目があります。それは多対1の関係です。 – ca9163d9

+0

だから、これらのテーブルにPKがあれば、それはfookey +値になりますか? – Rich

答えて

0

顧客が潜在的に複数の趣味を有するようdimCustomerと同様のシナリオのこの種を満たすために、典型的なキンボールアプローチは寸法(dimCustomerとdimHobby)との間のブリッジ・テーブルを使用することです。

This linkは、ブリッジテーブルがどのようにこの問題を解決できるか、そしてより良い結果を得る代替案をまとめたものです。

ビジネス要件が何であるか、これらの価値タイプの数、さまざまな価値タイプと価値がどのように「統一されているか」、および使用するBIテクノロジデータにアクセスすることは、さまざまな多人数の人に対応する1つのUberブリッジにブリッジを組み込むべきかどうかに決定的な答えを与えることは困難です。上記のすべてがある程度答えに影響します。

一般に、「ジェネリックテーブル」のアプローチは、アナリティクスのプレゼンテーションの場合よりも、管理の場面の方でより便利です。私のデフォルトのアプローチは、ETLの観点から管理できなくなったり、ユーザーの問合せの観点からはるかに複雑に感じられるまで、特定のブリッジ・テーブルを作成することです。私はget-goから組み合わされたテーブルに「最適化」するつもりはないだろう。

あなたの状況が普通の基準(あなたの例のように3つ、または10つ)を超えている場合、組み合わせると良い考えになるかもしれません。これにより、dimCustomer、dimValueType、dimValueのディメンションを使用すると、それは事実のない事実のようになり、完全に合理的な解決策になります。

+0

私の場合、趣味は単なるテキスト文字列であり、dimHobbyという次元を作成しません。 Etlは、趣味の価値が有効であることを確認するために使用されます。 – ca9163d9

+0

あなたがそれらを組み合わせるべきかどうかに関しては、あなたがそれをより良く管理したり、理解しやすくするために役立つかどうかは確かです。そうでない場合は、しないでください:-) – Rich

関連する問題