データベースの履歴データの持ち方
データベースの履歴データの持ち方について、考えてみました。
SEQ | 履歴 | 料金 |
1 | 1 | 100 |
上記のようなデータがあるとします。
料金が間違っていたので訂正します。レコードは以下のようになります。
SEQ | 履歴 | 料金 |
1 | 1 | 100 |
2 | 2 | 200 |
料金を200円に訂正しました。このデータを取得するには履歴 = MAX(履歴)を取得する必要があります。副問い合わせになります。
履歴の考え方を以下のように変えるとSQLを副問い合わせなしにすることができ、パフォーマンスが良いです。具体的には履歴の最新=1とする考え方です。
SEQ | 履歴 | 料金 |
1 | 1 | 100 |
訂正があると、現在のMAX(履歴) + 1で今のデータをインサートします。以下のようなデータができます。
SEQ | 履歴 | 料金 |
1 | 1 | 100 |
2 | 2 | 100 |
履歴=1が最新なのでそのデータに対して料金を訂正します。
SEQ | 履歴 | 料金 |
1 | 1 | 200 |
2 | 2 | 100 |
さらにわかりやすくするためにもう一度訂正します。(履歴=MAX(履歴) + 1のデータに履歴をアップデートする)
SEQ | 履歴 | 料金 |
1 | 1 | 200 |
2 | 2 | 100 |
3 | 3 | 200 |
履歴=1のデータに対して料金訂正します。
SEQ | 履歴 | 料金 |
1 | 1 | 300 |
2 | 2 | 100 |
3 | 3 | 200 |
このように履歴を持つと、WHERE句は履歴=1とするだけでよくなります。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント