テーブル設計について考えてみたのでメモ3

今回はユーザがもつポイントについて考えてみた

 

やりたいこととしては

1. 月に1回ユーザにポイント付与される

2. ユーザはいつでもポイントを購入することができる

3. ユーザが商品を購入するとポイントが付与される

 

こういうことがやりたかった場合、私だったらとても悩む...

 

■案1

・ユーザマスタ

ユーザID

ポイント

 

みたいにして都度、ポイントカラムの値を足したり引いたりするのがいいのだろうか...

ポイントをとってくるときとかたしかに楽そうだけど

 

■案2

・ユーザマスタ

ユーザID

 

・ポイントテーブル

ユーザID

ポイント(+-あり)

 

こんなかんじで、ポイントが増えるときと減るとき両方レコードを登録して

ポイントとってくるときはポイントカラムの合計

 

■案3

1.

→入会日さえわかれば、いつでも計算できるのでわざわざデータとして残さない

 

2.3.

→ 購入履歴さえわかれば、いつでも計算できるのでわざわざデータとして残さない

 

こんな風に考える人もいるかも...

不要なものは残さない!て考え方もけっこうあるのでこういうのもありかもね

けど、今回の場合はいろいろ複雑になりそう...

 

まー、結論からすると案2が1番素直なのかなと思いました

 

※追記で

案2の問題点で、月に1度ポイント付与するバッチやら何やらを処理するわけです。

月がかわってから実際にポイントが付与されるまでタイムラグが発生するってわけで。

 

ユーザ数が多いサービスだとこのタイムラグもけっこうな時間になるそうな...

 

やっぱり案3の考え方もいれたほうがいい?ってなったんだけど

 

案2の「ポイントテーブル」に「ポイント有効期限開始日」みたいなカラムを用意して予め一部のユーザに付与しておくのもありかなーって思いました