ストアデータベースからデータウェアハウスを作成していますが、ディメンションとファクトの設計について質問があります。
ストアデータベースには、Person、Person_Address、およびPerson_Address_Typeのテーブルが存在します。これらは、別のテーブル名Entity_Address_IDによってリンクされます。この名前は、3つのテーブルを主キーでリンクして、個人のアドレスとそのタイプの詳細を示します。
私の質問は、3つのテーブルすべてのディメンションと、それらをリンクするためのファクトのないファクトテーブルを作成する必要があるのか、それともディメンションを非正規化して、リンクされているアドレスとアドレスタイプの外部キーを各ディメンションに追加するのかです。あまりにも?
これは、現在のデータベースがどのように見えるかを説明するための非常に簡単なUMLです。
それらをマージします。個別のAddresses
テーブルを用意する価値がある場合もありますが、通常は、これらのフィールドを単一のCustomers
ディメンションにするのが最も簡単です。アドレスはほぼ一意であるため、レコードを独自のテーブルに移動して多くのレコードを保存することはありません。
Customers
テーブルが非常に大きく、アドレスが比較的頻繁に変更される場合は、Addresses
をタイプ4SCDとして移動することは価値のある最適化ですが、小さいものです。
特定の売上とは関係なく顧客を分析することに関心がある場合(たとえば、「上位100人の顧客の20%が海外」)、このNumCustomers
テーブルにCustomers
ダミー列を絶対に追加できます。それを事実のないファクトテーブルに変えるために。