データベースの履歴データの持ち方

データベースの履歴データの持ち方

データベースの履歴データの持ち方について、考えてみました。

SEQ履歴料金
11100

上記のようなデータがあるとします。

料金が間違っていたので訂正します。レコードは以下のようになります。

SEQ履歴料金
11100
22200

料金を200円に訂正しました。このデータを取得するには履歴 = MAX(履歴)を取得する必要があります。副問い合わせになります。

履歴の考え方を以下のように変えるとSQLを副問い合わせなしにすることができ、パフォーマンスが良いです。具体的には履歴の最新=1とする考え方です。

SEQ履歴料金
11100

訂正があると、現在のMAX(履歴) + 1で今のデータをインサートします。以下のようなデータができます。

SEQ履歴料金
11100
22100

履歴=1が最新なのでそのデータに対して料金を訂正します。

SEQ履歴料金
11200
22100

さらにわかりやすくするためにもう一度訂正します。(履歴=MAX(履歴) + 1のデータに履歴をアップデートする)

SEQ履歴料金
11200
22100
33200

履歴=1のデータに対して料金訂正します。

SEQ履歴料金
11300
22100
33200

このように履歴を持つと、WHERE句は履歴=1とするだけでよくなります。

 

コメント

タイトルとURLをコピーしました