日付 (通貨レートなど) に基づいて影響を与えるテーブルを設計する場合、どちらが優れていますか?
- 発効日 (max(発効日) を調べて現在の値を取得)
- 開始日 - 終了日条件 (sysdate より大きい)
よろしくお願いします。
場合によります。特定のエンティティへの変更を表すテーブルがあり、エンティティが変更されたとき、およびその変更が後続の変更によって置き換えられたときを記録したいとします。
1.各イベントの発効日のみを記録する場合、INSERT はより単純です。更新するために以前のレコードを見つける必要はありません。ただし、クエリはより複雑になります。データセットに対してウィンドウを実行して、一度に適用可能なレコードを見つける必要があるため、パフォーマンスが低下する可能性があります。
もう 1 つの欠点は、このモデルには制限がないことです。通貨を「永久閉鎖」として記録することはできません (終了日がある場合は可能です)。
2.各イベントの開始日と終了日を記録すると、クエリが簡単になります。各行を個別に確認するだけで、特定の時点で「最新」かどうかを知ることができます。ただし、INSERT は少し複雑です。新しいイベントを挿入するときは、以前のイベントを更新して終了日をマークする必要があります。
このモデルは限定的です。最終イベントに終了日を設定し、「オープン」レコードを持たないようにすることができます。