• データベース
#24

ポイント管理・アンケート管理のDB

ポイントの管理を行うDBの構造はどんなものがあるか

・グループM   ↓  ・店舗マスタ    ↓    ・ポイント利用テーブル

・ユーザM

なぜグループマスタが必要か

ワタミ(グループマスタ) ↓ →東京店  ↓  ・3/1  ・3/20 →横浜  ↓  ・3/5  ・3/6


基本的なポイントの動き

  • 売上 → 加算
  • ポイント消化 → 減算
  • ボーナス、キャンペーン → 加算

ワタミ(グループマスタ) ↓ →東京店 ↓ →横浜店

つぼ八(グループマスタ) ↓ →東京店 ↓ →横浜店

店同士は互換性があるが、企業が異なる場合をあとであわせて管理することになったとき...

例:ワタミ→100p、つぼ八→80p

これの互換性、コンバートをしやすくするときは、店舗マスタではなく、グループマスタとして管理しておく

発展形

グループマスタの上に「業種マスタ」を追加してもよい

薬局グループでためたポイントを、居酒屋でポイントを使いたいなどの変更が可能

居酒屋→ワタミ(グループマスタ)
      →東京店
      →横浜店

居酒屋→つぼ八(グループマスタ)
      →東京店
      →横浜店

-----------------------------------

薬局→HAC(グループマスタ)
      →東京店
      →横浜店

薬局→スギ薬局(グループマスタ)
      →東京店
      →横浜店

ポイントのレートを意識するとき、店舗マスタにレートをもつほうが適切かも検討する

どうやってマネタイズするか

このアプリ導入についてはQRコードで配布

Webサイト 持ち込み ↓ 専用のQR表示 ↓ 使用可能(システムは使える・ポイントは貯められるけど、セキュリティ的に使うことはできない) ーーー仮審査おわりーーー ↓ 本審査 ↓ OKならレート交換


入力部分はデータベースとは関係ないけど一番むずかしいところ。

ペイペイは手入力を許したことで勝てた

入力

  • POSレジ連携
  • 手入力

自分が何をやりたいのかから考え始める


  • 手入力の不正を防ぐ

例:id, shop, data, pointカラム以外、ランダムな16桁の数値(可逆的なハッシュ値)

ハッシュ値はid, shop, data, pointをキーに生成し、

変更が不正なものの場合、このレコードを無効にする対策を行う

ハッシュ値を深くすると激重になる


レコード数が爆発的に多くなるのでスピードをだすときは

idusershopdatapoint
110050031810000
2101700318700
3130300318-100
4100500319-560

ind...1 user shop date

ind...2 user date shop

idusershopdatahourtimepoint
1100500318091910000
21017003181105700
31303003181234-100
41005003191830-560

ある日の何時から何時までの売上を管理するとかだと、時間も切り出してレコードに保存する

計算はデータベースに計算させないほうがいい場合もあるので、アプローチは考える必要がある

インデックスをはるのは最低限にする(メモリ食う)

どういう集計するかでインデックスや工夫の余地がある


アンケートについて考える

アンケートを構成するもの

  • 文字入力
  • 文章入力
  • 選択
    • プルダウン
    • 単一選択
    • 複数選択

テーブル構成

アンケートテーブル

  • id
  • アンケート名
  • 回答期限
    • 回答期限From
    • 回答期限To
  • 誰が

アンケート本体テーブル

  • id
  • アンケートid
  • 行番号
  • 設問名
  • 入力方法
  • プルダウンなどの場合、選ばれた選択肢

回答テーブル

  • id
  • アンケート本体id
  • ユーザid
  • 回答

DBだけで集計するのは難しいので、SQLで吐き出したデータをプログラムで集計させるほうがこの構造だといいかも

*

last update: 2023/10/21