テーブルを正規化する必要があるかどうかについて、ETL チームとデータ モデラーの間で議論があり、オンライン コミュニティから何らかの見解を得たいと考えていました。
現在、テーブルはそのように設定されています
MainTable LookupTable 主キー (PK) コード (PK) コード (FK) 名 その他の列
- 両方のテーブルは、ETL ジョブを介して (サード パーティからの) 定期的なファイルによって
のみ入力されています。
- ファイル内の単一のレコードには、単一行の両方のテーブルのすべての属性が含まれています)
- これらのテーブルにデータを入力するファイルはデルタです (変更のある行のみがファイル内にあります)。
- 1 つのレコードの 1 つの属性に対する 1 つの変更 (これもサード パーティによるもののみ) は、ファイル内のそのレコードのすべてのデータになります。
- コードと名前のドメイン値は 不明です。
質問:LookupTable を MainTable に非正規化する必要がありますか?
- ETL チーム: はい。このセットアップでは、ファイルのすべての行は、最初に 2 番目のテーブルをチェックして、FK がそこにあるかどうかを確認し (そうでない場合は挿入)、次に MainTable 行を追加する必要があります。より多くのコード、より悪いパフォーマンス、そして少し多くのスペース。ただし、サードパーティによる LookupTable.Name の変更に関係なく、定期的なファイルには影響を受けるすべての行が反映されるため、各行を解析する必要があります。MainTable にひとまとめにすると、単純な更新または挿入だけになります。
- データモデラー: これは標準的な優れたデータベース設計です。
何かご意見は?