それは、ファクトテーブル内の100の+の列を持ってしても大丈夫ではありません。間違ったデータモデルの症状です(欠落した値についても同じことですが、うまく設計されたファクトテーブルには何もありません)。
ファクトテーブルデザインのロジックは、次のとおりです。 最初に、「粒度」テーブルに含まれるデータの最も細かいレベルを判断します。あなたのケースでは、データ細分性はポリシー番号+製品によって定義されます。一緒に使用すると、利用可能な最も詳細な情報が一意に識別されます。
次に、「ファクト」を特定します。通常、ファクトは集計できるデータの一部です(合計、数、平均など)。あなたのケースでは、Insured_Value、Gross_Premium、Net_Premiumです。
最後に、これらのファクト(ディメンション)のビジネスコンテキストを定義します。あなたのケースでは、それらはポリシーと製品です(ほとんどの場合、ある種のDateもあります)。
あなたの結果のファクトテーブルは次のようなものになります。
- をPolicy_Date
- Policy_Number
- PRODUCT_ID
- Insured_Value
- Gross_Premium
- Net_Premium
Policy_Dateは「カレンダー」ディメンションへの接続を提供し、Product_IDは「Product」ディメンション(30個の製品とその説明を含むテーブル)に接続します。
ポリシーナンバーは、「縮退ディメンション」と呼ばれるものです。通常、ディメンションには接続されていないIDです(ただし、必要に応じて使用できます)。これはファクトテーブルにリファレンスとして格納されています。モデルに「ポリシー」ディメンションを追加する人もいますが、通常はデザインミスです。そのようなディメンションはファクトテーブルに匹敵する大きさで、モデルのパフォーマンスが大幅に低下する可能性があります。通常は、ポリシー属性を複数の小さな次元に分割し、ポリシー番号を縮退した次元にしておく方がよいでしょう。
したがって、5つの製品の標準ポリシーは、5つのフィールドを持つ1つのレコードではなく、ファクトテーブルの5つのレコードとして表されます。これは重要な違いです。ファクトテーブルフィールドの名前に情報(ケースの製品)を保存することは決してありません。
RADOの説明をお寄せいただきありがとうございます。ポリシーの代わりにファクトテーブルに商品を掲載すると、どのようにディメンションをリンクできますか?それらは主にポリシーのためのものです。それでは、それぞれの製品に同じ次元をリンクする必要がありますか? – kapz
「商品ごとに同じ次元をリンクする」という言い方がわかりません。あなたは私に例を挙げることができますか? データモデルの記述方法は、次元「Product」とFact_IDのファクト表をリンクするだけです。他のディメンションがある場合は、そのIDをファクト表に追加する必要があります。 – RADO