システムメンテナンスのお知らせ

こんにちは!みなさんのお知恵をお借りしたいと思っています。
下記の要件を満たすDB設計をしたいです。
MySQL5.5 + Java 5で実装予定です。

システム概要
(1)ユーザはWebサイトにて、ポイントを購入し、ポイントを使用することでアイテムが購入できる。
(2)ポイントは常時、購入することが可能で、アイテムも同様に常時、購入可能である。
(3)ポイントには有効期限があり、購入日から有効期限(1年)が過ぎたポイントは無効となる。
(4)購入するポイント数はユーザが任意の値を入力することができる。
(5)アイテムを購入する際に必要なポイント数は、アイテムによって異なる。
(6)ポイントが消失するのは月末である。
(例.2013年7月に購入したポイントは2014年8月1日になると消失する)
(5)ユーザー数は300万程度


満たしたい要件
・現在のポイント残高はWebサイトにて常時閲覧可能としたい。
・当月に無効となるポイント数は常時閲覧可能としたい
・Webサイトをメンテナンスにして、バッチを流すなどの処理はなるべく避けたい。

お知恵を貸して頂けると幸いです。よろしくお願いします!

gooドクター

A 回答 (3件)

ANO.2です。


うっかりしてました。


>⇒それを避けるためにバッチ処理を使わない設計にするとなると、
>ポイント残高テーブルを用意して、13か月分の項目を用意する。

の部分。月が変わると更新しなきゃいけないのですが、そのために
13か月分の項目に加えて、基準月を用意します。
基準月は、当月利用可能ポイントの当月がいつなのかを示します。

プログラムで読み込んだとき(ポイント照会も含む)
基準月が当月でなければ、13か月分の項目を順番にシフトして、
基準月を当月にして、更新してしまいます。
その後、画面表示なりの処理をする。

⇒集計がむちゃくちゃやりにくい構造になるので、やっぱり、
 バッチ処理使ったほうがベターでしょうね。

注:集計ってなに?というと
今全員のポイント残高合計がいくら?
とか、顧客別のポイント一覧とかです。
    • good
    • 0

要件を読んでいてまず、一番考える必要があるのは、


・ポイントには有効期限があり、購入日から有効期限(1年)が過ぎたポイントは無効となる。
ってことですね。

・販売サイトみたいなものですから、当然、返品もあるでしょう。
特に不良品返品で代替品がないので返金っていうケース。
ポイントを戻す必要あるのですが、
販売時は有効期限内だが、戻す時点で、有効期限が切れているポイントはどうします?
ま、有効期限を販売日から有効期限迄の日数で設定するのが親切ってものですが、
有効期限の例外ルールが出来上がってしまいます。

・ポイントが消失するのは月末である。
月末のいつ?
ポイント消失にバッチ処理を利用すると、バッチ処理中はシステム停止は不要でも、
決済停止しておかないと、不公平がでますよ。
(テーブルロックしてしまうと不公平はでないけど、
 300万件処理する間に操作された決済処理がタイムアウトしないようにしておかないといけない。)
⇒それを避けるためにバッチ処理を使わない設計にするとなると、
ポイント残高テーブルを用意して、13か月分の項目を用意する。
例)
顧客A 当月利用可能ポイント、翌月利用可能ポイント・・・13ヶ月後利用可能ポイント
ポイント購入したら、当月利用可能ポイント~13ヶ月後利用可能ポイント迄全部に+
アイテム購入したら、当月利用可能ポイント~13ヶ月後利用可能ポイント迄全部に-
ポイント購入取り消しやアイテム購入取り消しは上記の逆。

なお、ポイント履歴の表示は書いていませんが必須の要件と思います。
それを実現するには上記のポイント残高テーブルと別にポイント履歴テーブルが必要。
例)
日付 顧客A 適用項目(ポイント購入/アイテム購入・・・) ポイント数(+/-両方)
とするか、
ポイント数を、受取ポイント数と支払ポイント数の2つにわけるか
(ポイント購入取消しなら受取ポイント数にマイナスの数字、
 アイテム購入なら支払ポイントにプラスの数字 と表現が豊富なのでこっちのほうがいいかな。)
 
で、ひとつ疑問。
ポイント購入は、申し込んだら、ポイントがプラスされるのかな?
それとも、入金を待って、入金処理の最中にポイントをプラスするのかな?
たぶん、Webサイトなんだろうと思うので、ポイント購入申し込みと入金の2つの処理を独立させて
おかないと、申し込みはしたものの、入金できない(例えば銀行引き落としができないよぉとか)
場合に困るはずです。
・・・月末に申し込んで、月初に入金が済んだとき、有効期限はどっちで判定?
ま、カード決済のみで、カードの請求処理と連動させて、請求処理が成功したらポイントプラス
ということならあまり問題はでませんが、今度は、こちらのシステムが異常終了したときに
カードの請求を取り消す処理を考えておかないといけない問題もでてくるので・・・。

とまあ、質問を読んだときの感想、じゃない、ぱっと思いついたことを書きます。
(具体的にどうしようと思うのだが、こんな方法で大丈夫だろうかとかもう少し
 ブレイクダウンしてあるほうが回答は書きやすいですね。
 見当違いの方向かもと思いつつ上記の回答を書いちゃいますけど。)
    • good
    • 2

で、質問内容は?

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング