[解決済み] データベースで月額課金システムを設計するためのグッドプラクティス【終了しました
質問
私は、データベースで月額制ソフトウェアシステムを設計する方法を知りたいのです。 これらのシステムはインターネット上で広く使用されていますが、データベース設計に関する多くのものを見つけることができません。
私の場合、これらの要素(および多分私が忘れたいくつかの他の要素)は含まれなければなりません。
- クライアント
- プラン('basic'/'premium'など)。各プランには月額料金とクレジット数が設定されています(例:ベーシックプランは月額30クレジット、プレミアムプランは無制限クレジット)。
- クレジットは、アプリケーション内で使用される仮想通貨です。
- サブスクリプション/アンサブスクリプション
- 支払い(割引などにより、実際に支払う金額はプランの基本料金とは異なる場合があることに注意)
- ... ?
データベースの設計に加えて、これを行うために設定する必要があるトリガーがあるかもしれません(?)
私の苦手なところ。
- 何がグローバルなデザインなのかが大まかにわからない。
- DBの行は、month_susbscrition(つまり、月ごとにクライアントごとに1行)または購読自体(つまり、クライアントごとに1行)のどちらであるべきでしょうか?
- 毎月のサブスクリプションの自動更新は、どのように処理しますか?
- 毎月の自動支払いを処理するためにPaypalのようなサービスを使用することを予見している場合、どのように支払い設計を処理しますか?
備考
私が自分のニーズを詳細に明かさないのは、そうすることで議論が一般的なものになり、他の人々にとってより有益なものになるからです。
ありがとうございました。
どのように解決するのですか?
私はこのモデルを使用します。
あなたのクライアント
Client
------
Client ID
Name
...
あなたのプラン(必要なときに新しいプランを定義することができます)。 クライアントが一度に12ヶ月分を購入した場合の割引を提案したい場合は、Price_per_yearを追加します(ただし、あくまでアイデアです)。
Plan
------
Plan ID
Name
Credits_per_month
Price_per_month
(Price_per_year)
あなたのサブスクリプション
Subscriptions
------
Subscription ID
Client ID
Plan ID
Subscription_start_timestamp
Subscription_end_timestamp
このモデルを考慮すると、私は1プランにつき1クライアントあたり1行を使用することになります。
クライアントが "プレミアムで初月無料 !" のようなオファーを購読した場合、データベースは次のようになります。
Client
------
ID: 1; LastName: Foo; ...
Plan
------
ID: 1; Name: Premium; Credits: -1 (unlimited); Price_per_month: 30
ID: 2; Name: Premium 1st month offer; Credits: -1; Price_per_month: 0
Subscription
------
ID: 1, Client ID: 1, Plan ID: 2, Start: 2014-05-07 08:00, End: 2014-06-06 07:59
ID: 1, Client ID: 1, Plan ID: 1, Start: 2014-06-07 08:00, End: 9999-12-06 07:59
クライアントが7月1日に購読を中止した場合、Subscriptionテーブルのカラムの最後を月と年だけで更新します(曜日と時刻を事前に設定したため)。
Subscription
------
ID: 1, Client ID: 1, Plan ID: 2, Start: 2014-05-07 08:00, End: 2014-06-06 07:59
ID: 1, Client ID: 1, Plan ID: 1, Start: 2014-06-07 08:00, End: 2014-07-06 07:59
クライアントが退会していないかどうかを知るには、次のようにします。
Select Count(client.*) From Client client
Inner Join Subscription sub On sub.client_id = client.id
Where DATE_TODAY Between sub.start And sub.end
1つのクライアントに対して同時に2つのサブスクリプションを持つことができないことを確認します。
これにより、毎月のサブスクリプションを自動的に処理することができます。 を自動的に処理することができます。 が、銀行やPayPalの口座には反映されません。
しかし、一部の銀行では、2つのサービスを提供しています。 - ユニークデビット - 定期的な引き落とし
2つ目は、月額制の取り扱いができるようになります。
関連
-
[解決済み] MySQLでデータベースやテーブルのインデックスを見るには?
-
[解決済み] マスター・マスターとマスター・スレーブ、どちらのデータベース・アーキテクチャが良いのか?
-
[解決済み] データベースの設計に外部キーは本当に必要なのか?
-
[解決済み] DBに型を格納する際のMIMETypeの最大長について
-
[解決済み] Postgresql - データベースをバックアップし、異なる所有者にリストア?
-
[解決済み] 非リレーショナルデータベース設計【終了しました
-
[解決済み] 1対1の関係はどのようなときに使うべきですか?
-
[解決済み] MS Accessの代替となるフリーソフト [終了しました]。
-
[解決済み] データベースに登録する電子メールアドレスの最適な長さは?
-
[解決済み] H2データベースを管理するフロントエンドツール【終了しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データベースにはすでにオブジェクト名が存在する
-
[解決済み] マスター・マスターとマスター・スレーブ、どちらのデータベース・アーキテクチャが良いのか?
-
[解決済み] 変更履歴/監査データベーステーブルの最適なデザインは?[クローズド]
-
[解決済み] データベースのインデックスはいくつあっても足りない?
-
[解決済み] DBに型を格納する際のMIMETypeの最大長について
-
[解決済み] データベースに郵便番号を格納する必要があります。カラムの大きさはどのくらいにすればよいでしょうか?
-
[解決済み] SQLITE SQLダンプファイルをPOSTGRESQLに変換する
-
[解決済み] 非リレーショナルデータベース設計【終了しました
-
[解決済み] MS Accessの代替となるフリーソフト [終了しました]。
-
[解決済み] DynamoDBからアイテム数を取得するには?