レポートを簡素化するために、私たちが持っているファクトテーブルごとに、よりユーザーフレンドリーな形式ではありますが、ファクトテーブルの名前を示す列を含めることができるかどうか疑問に思っています。
例えば.
FACT_SALES
Source ID Name
Sales 1 Bob
Sales 2 Terry
....
FACT_TESTING
Source ID Type
Product Testing 23 Adhoc
Product_Testing 29 ...
...
そうでない場合は、これを表示するために何らかのコーディングを追加する必要があるという点で、エンドユーザーによるアクションを必要とせずにこの情報を追加する適切な方法は何ですか?
私がお勧めするのは、fact_sourceテーブルがあることです。
CREATE TABLE fact_source
(
fact_source_id INTEGER, -- auto-increment.
fact_source_name VARCHAR (50)
);
独自のRDBMS(どちらかは言わなかった)独自の自動インクリメントキーシステムを使用して、fact_source_idを生成します)
INSERT INTO fact_source fact_source_name) VALUES ('Sales'), ('Testing');
そして、それを関連するテーブルの外部キーとして使用します。
次に、テストで正常に機能し、リソースの負担がないことが示された場合、レポートクエリでユーザーフレンドリーな(つまりテキスト)出力を「事前に調理」できます。
概説されている理由のためにENUM
sを使用しないでください ここ 。システムに機能があるからといってnotは、それらを使用する必要があることを意味します! shouldは、常にCHECK
制約(信じられないことに、MySQLにはこれらがありません)または上記のルックアップテーブルのいずれかを使用する必要があります。
キーをSMALLINT(または同様のもの)として保存すると、スペースを少し節約できます。
ここでの目的が固定の代替テーブル名を提供することである場合(ソースを記録するのではなく、異なる場合があります)、1つのオプションは、永続化されていない仮想列(SQL Serverで計算された列)を実装することです。
これは実行可能なアプローチのようです。これは、データセットのソースを追跡するために列RecordSource
が使用されているDataVaultのアプローチにいくぶん似ています。
しかし、ここではそうではないように私には思えます。したがって、2つの方法を提案します。
1)まさにあなたが提案したもの
2)Fact_Testingキューブが「ProductTesting」ソースに明確にバインドされるように、それ自体を表すデータマート/ファクトテーブルを構築します。ドキュメント、名前付け、またはビルド前のレポートの提供を通じて。