web-dev-qa-db-ja.com

ファクトレスファクトテーブルを作成するか、テーブルを非正規化する必要があります

ストアデータベースからデータウェアハウスを作成していますが、ディメンションとファクトの設計について質問があります。

ストアデータベースには、Person、Person_Address、およびPerson_Address_Typeのテーブルが存在します。これらは、別のテーブル名Entity_Address_IDによってリンクされます。この名前は、3つのテーブルを主キーでリンクして、個人のアドレスとそのタイプの詳細を示します。

私の質問は、3つのテーブルすべてのディメンションと、それらをリンクするためのファクトのないファクトテーブルを作成する必要があるのか​​、それともディメンションを非正規化して、リンクされているアドレスとアドレスタイプの外部キーを各ディメンションに追加するのかです。あまりにも?

これは、現在のデータベースがどのように見えるかを説明するための非常に簡単なUMLです。 UML of Problem

1

それらをマージします。個別のAddressesテーブルを用意する価値がある場合もありますが、通常は、これらのフィールドを単一のCustomersディメンションにするのが最も簡単です。アドレスはほぼ一意であるため、レコードを独自のテーブルに移動して多くのレコードを保存することはありません。

Customersテーブルが非常に大きく、アドレスが比較的頻繁に変更される場合は、Addressesをタイプ4SCDとして移動することは価値のある最適化ですが、小さいものです。

特定の売上とは関係なく顧客を分析することに関心がある場合(たとえば、「上位100人の顧客の20%が海外」)、このNumCustomersテーブルにCustomersダミー列を絶対に追加できます。それを事実のないファクトテーブルに変えるために。

1