3

例として、2 つのディメンションと 1 つのメジャーを持つファクト テーブルがあるとします。

FactMoney テーブル


ProjectKey int

PersonKey int

現金金額のお金


2 つの次元は次のように定義されます。

DimProject (タイプ 0 ディメンション - つまり静的)


ProjectKey int

プロジェクト名 varchar(50)


DimPerson (緩やかに変化するタイプ 2 ディメンション)


PersonKey int

PersonNaturalKey int

個人名 varchar(50)

有効開始日日時

有効終了日日時

IsCurrent ビット


これまでのところかなり簡単です。ここで、個人カテゴリの概念を紹介します。

DimCategory


カテゴリキー int

カテゴリ名 varchar(50)


DimPerson と DimCategory の間に M2M 関係を構築します。

BridgePersonCategory


PersonKey int

カテゴリキー int


つまり、人々は 1..n のカテゴリを持つことができます。

私の問題は、人はゆっくりと変化するディメンションであるため、人の名前が変更されると、新しい人の行を追加し、発効日を更新して現在のフラグであるため、大したことではありません。

しかし、個人のカテゴリをどうするのでしょうか? 新しい人のバージョンがポップアップするたびに、ブリッジ テーブルに行を追加する必要がありますか?

当然のことながら、個人のカテゴリが変更された場合、それは個人テーブルに新しい行を作成する必要があるということでしょうか?

4

3 に答える 3

2

主な質問について: カテゴリ テーブルにカテゴリを追加する必要があると思います (おそらく古い人の行からコピーします)。したがって、新しい (変更された) 状態で人物を分類し続けることができます。

カテゴリの変更について: 個人の行を追加するのではなく、カテゴリ テーブルに初期有効期限と有効期限を追加したいと考えています。このようにして、各カテゴリを個別に変更できます。ただし、カテゴリを過大評価する可能性があるため、ポイントインタイム クエリではないことに注意する必要があります。

于 2013-11-02T15:40:06.550 に答える
0

DimPerson テーブルの個人キーではなく、個人名のみが変更されるためです。

@ScottHerbertが言ったように、DimPersonにSCD2がある場合、これは正しくないと思います。この場合、PK (PersonKey だと思います) が変更されるため、BK (PersonNaturalKey だと思います) だけが変わりません。ただし、ビジネス キーで関係を構築することはありません。これは、どの人物がどのカテゴリを持っていたかの履歴が失われるためです。

私の意見では、Person Cat に新しいバージョンを追加して、Person からの新しい PK と Category からの古い PK を追加する必要があります。

同じことがカテゴリにも当てはまります。名前が変更されている場合、このカテゴリは新しい PK を取得し、ブリッジ テーブルに追加する必要があります。

于 2016-09-28T13:21:17.730 に答える