
久しぶりにデータモデルの話題です。
ここでは、マスタの履歴管理について、いくつかのパターンを挙げて説明したいと思います。
■履歴保存用のエンティティを追加し管理(パターン1)
商品エンティティのキーに適用開始年月日を保持し、変更があったタイミングでレコードを追加することにより商品の変更履歴を管理します。
①ある1レコードについて、ある時点の全ての属性の値を、履歴として管理することになります。
②参照するトランザクション(受注明細)に履歴(商品履歴)の識別子を持たないため、履歴情報が存在する状態で、過去のマスタ情報を参照するためには、受注.受注日と商品履歴.変更日付で検索する等が必要となります。
■履歴保存用のエンティティを追加し管理(パターン2)
パターン1のバリエーションですが、履歴管理用のエンティティのキーを「履歴管理用SEQ」とします。
この場合は、参照するトランザクション(受注明細)に履歴(商品履歴)の識別子を持たないため、履歴情報が存在する状態で、過去のマスタ情報を参照するためには、受注.受注日と商品履歴.変更日付で検索する等が必要となります。
■履歴情報を同一エンティティで管理(パターン3)
同一エンティティ内で履歴管理を行うために、キーに商品コードとは別に変更日付(適用開始日)を持たせます。
カレント情報を参照するためにも、受注.受注日と商品.適用開始日で検索する等が必要となります。
■履歴情報を同一エンティティで管理(パターン4)
同一エンティティ内で履歴管理を行うために、自己参照の関係を定義し、変更前のレコードの参照キーを属性として保持します。
①変更前と変更後の商品コードが別コードとなります。
②最初の情報を取得するためには、変更後の商品コードが入っていないレコードまで遡ってレコードを特定する必要があります。
(次の記事に続く・・・)
※コメント投稿者のブログIDはブログ作成者のみに通知されます