1

列が対応する自明なディメンション テーブルなどへ(fk_dim1value, fk_dim2value, ..., value)の外部キーであるようなファクト テーブルを含むディメンション モデルを考えてみましょう。fk_Xdim1value (id, value), dim2value (id, value),

これらの事実と次元のテーブルは、さまざまなソースから自動的に収集されるため、多くのテーブルが存在します...そしてそれらは冗長です: すべての次元値テーブルは構造的に同一であり(id, value)、それ以上のセマンティクスを持たないテキスト値の単純なコレクションを表します (唯一の違いは、さまざまなファクト テーブルでそれらを参照するさまざまな外部キーです)。あまり重要でないディメンション タイプは後で登場する可能性がありますが、さまざまなタイプのディメンションのセットは小さいままです。

dimvalue (fk_dim, dimvalue_id, value)したがって、ディメンション テーブルを、 tableをfk_dim参照する1 つのテーブルにマージし、各ディメンション内dimension (dim_id, name)dimvalue_idのみ一意になるようにしたいと考えています。自然な主キーは複合です: (fk_dim, dimvalue_id).

ファクト テーブルの外部キー列はすべて同じテーブルを参照するようになりましdimvalue (fk_dim, dimvalue_id, value)たが、もちろん、各列は特定のディメンションに関連付けられているため、そのディメンションの値を具体的に参照することに限定する必要があります (統合テーブルの水平パーティション)。dimvalue)。

これを行う(賢明な)方法はありますか?

「半複合」外部キーのようなものを意味します。つまり、複合 PK の「スライス」への単一列参照であり、他の列には固定値があります。「完全複合」FK になりますFOREIGN KEY (col1, col2) REFERENCES dimvalue (fk_dim, dimvalue_id)が、ここでは固定されているため、キーの「ホーム」側は 1 つの列にすぎず、主キーfk_dimの 2 番目の列を参照します。dimvalueのようなものFOREIGN KEY (fk_dim7value) REFERENCES dimvalue (fk_dim=7, dimvalue_id)

そのようなことは可能ですか?それとも、この最後の段落で道に迷っていますか? テーブル全体への外部キーだけをあきらめて、dimvalueチェック制約を追加してディメンションで制限する必要がありますか? それとも、参照整合性のために、さらにあきらめて、別々の同一のテーブルをすべて受け入れる必要がありますか?

(書き込みパフォーマンスに対する制約の影響は重要ではありません。読み取りパフォーマンスは設計目標です。)

4

1 に答える 1

1

あなたはこれらの重要な考慮事項を述べました

  • データは異種システムから収集されるため、これは「レポート」テーブルであり、「操作」または「トランザクション」タイプのシステムではないと結論付けます。
  • 各ファクトテーブルには、行ごとに1つのビジネスデータ、つまり「値」列が含まれます
  • ファクトテーブルには「メジャー」または「ファクト」が1つだけ含まれているようです
  • 書き込みパフォーマンスは関係ありません。読み取りパフォーマンスのみが目標です。これは、これが「レポート」テーブルであるという私の結論を確認するものです。

あなたが速い読み取りパフォーマンスを求めていることを考えると、私は「大きなテーブル」のデザインを選びます。大きなテーブルの設計はトランザクションシステムにとって恐ろしいものですが、これはそうではありません。大きなテーブルとは、TABLE(DIM1VALUE、DIM2VALUE、DIM3VALUE、DIM4VALUE .... DIMNVALUE、FACTVALUE)を意味します

とにかく、ディメンションテーブルはビジネスデータの1列のみだったので、ルックアップをスキップします。すべての列(ファクト値を除く)にインデックスを付けてから、クエリのパフォーマンスをテストします。

大きなテーブルをロードしている間、データ品質の値を確認し、期待される範囲外の値にフラグを立てて対処することができます。

これで、ディメンションテーブルの数が多すぎる場合は、大きなテーブルをグループに分割して、グループ化を論理的な使用法に基づいて行うことができます。たとえば、ディメンションの10個の属性を常に一緒に使用する場合は、それらをBIGTABLE1にまとめます。 。

于 2009-09-10T21:28:51.643 に答える