1

データ ウェアハウスの特定のシナリオをモデル化する最善の方法を理解するのに苦労しています。

Person ディメンションと Tenancy ディメンションがあります。人は、一度に 0、1、または (まれに) 複数のテナントにいる可能性があり、多くの場合、時間の経過とともに一連のテナントを持っています。テナンシーには、1 人以上の人が関連付けられている可能性があります。テナントに関連する人々は時間の経過とともに変化する可能性があり、テナントは一般的に何年も続きます。

1 つのオプションは、テナント参照、開始日および終了日をタイプ 2 SCD 列として Person ディメンションに追加することです。これは、1 人の人が複数の同時テナントの可能性を無視する限り、うまく機能します。ただし、同様の設計上の問題に直面しているデータ ウェアハウスの他の領域があり、複数の関係を無視することはできません。

もう 1 つのオプションは、関係を累積スナップショット ファクト テーブルとしてモデル化することです。これが実際にどれだけうまく機能するかはわかりませんが、これを Person と Tenancy の 1 つのバージョン (どちらもタイプ 2 の SCD 列を持つ) にしかリンクできず、現在または人とテナントを結び付ける履歴レポート。

このタイプの関係をモデル化するための推奨される方法はありますか?

SQL.Injection によって与えられた患者の回答とコメントに基づいて編集します

SQL.Injection で記述されたモデルを示す基本モデルを作成しました。 推奨機種

テナントの開始日/終了日を「ジャンク」ディメンション (Dim.Tenancy) に移動し、個人のテナントの開始日/終了日をファクト テーブルに追加しました。これが関係をより正確に説明する方法だと感じたからです。

ただし、視覚的に見ると、ファクト テーブルが累積スナップショットではなく定期的なスナップショットであることを除けば、これは最初に使用したモデルと根本的に異なるとは思いません。確かに、いずれかのディメンションでタイプ 2 のゆっくりと変化する属性を更新するたびに、それが事実に反映されないという同じ欠陥に苦しんでいるようです。

これを機能させて現在の変更を反映させ、履歴レポートを作成できるようにするには、いずれかのディメンションで SCD2 の変更が発生するたびに、ファクト テーブルに行を追加する必要があるようです。次に、同じエンティティの複数のバージョンに参加することによる過大評価を防ぐために、他の関連ディメンションの新しいバージョンを追加して、参加する新しいキーを用意する必要があります。

これについては、もう少し考える必要があります。私は、データベース モデルが正しく、モデルがどのように使用されるかについての私の理解が間違っていると考え始めています。

それまでの間、コメントや提案は大歓迎です!

4

1 に答える 1

1

あなたの問題は、複数のアイテムの販売取引に似ています。違いは、トランザクションには通常複数の項目があり、テナンシー ファクトには通常 1 人 (テナント) が含まれることです。

テナントを事実としてモデル化しなければならないときに、テナントをディメンションとしてモデル化しようとしているために、ヒドラが生まれます。

あなたがテナントの側面を持っていると私が思う理由は、どこかに事実賃貸があるからです。事実家賃をモデル化するには、上記と同じアプローチを使用します。2 人が同じ物件のテナントである場合、毎月 2 つのファクト レコードを挿入する必要があります。テナント数による家賃の値を保存し、事実を保存します 2) 家賃の全額も保存します (データサイエンティストがデータをどのように使用するかはわかりません) 3) チェック 1) でビジネス ユーザー (リスク モデルを構築する人々); 分割方法については、高度なルールが存在する可能性があります (送料が同じ注文の複数の商品ラインに分割される場合、同様のことが起こります。均一に分配されない可能性があります)。

于 2015-01-29T10:25:06.523 に答える