1

過去の変更を追跡するために、valid_from と valid_to の 2 つの列を含むテーブルを設計中です。たとえば、私のテーブル構造は次のようになります。

create table currency_data
(
 currency_code varchar(16) not null,
 currency_desc varchar(16) not null,
 valid_from date not null,
 valid_to date,
 d_insert_date date,
 d_last_update date,
 constraint pk_currency_data primary key (currency_code, valid_from)
)

最初は valid_to を空白のままにしておきます。将来 currency_desc が変更された場合は、valid_to を古い説明が無効になる日付に設定し、新しい行を新しい説明で作成する必要があります。から有効。しかし、これら 2 つの行が重ならないようにするにはどうすればよいでしょうか。たとえば、次のクエリでは 1 行のみが生成されます。

select currency_desc
  from currency_data
 where currency_code = 'USD'
   and trunc(sysdate) between valid_from and nvl(valid_to, sysdate)

すべての開発者/エンドユーザーがこのルールを認識していることを確認する以外に、これを達成するためのより良い方法はありますか? どうもありがとう。

4

1 に答える 1

1

slowly changing dimensions (SCD)この種のストレージを処理するために知られている一連の実装アプローチがあります。

現在実装しているのは SCD II ですが、他にもあります。

可能性のある間隔の重複の問題について-標準の制約で(行レベルではなく)テーブルレベルの一貫性を強制する簡単な方法はないため、堅牢なアプローチは、直接DMLをこのテーブルに制限し、標準化されたものにラップすることだと思います挿入/更新の前にルールを適用し、すべての開発者が使用する pl/sql API。

于 2013-01-30T06:16:01.007 に答える