2011-08-09 7 views
1

私のサイトは毎月の定期購読アクセスを提供し、私は自分のテーブルを設定する最良の方法を検討しようとしていました。プレミアムサービスにアップグレードしたい場合、ユーザーはpaypalで支払いを選択することができます。私は、ユーザーがサービスを中止することを選択した場合、そのアカウントは制限された無料のアクセスバージョンに制限されると想定しています。有料サブスクリプションサイトに最適なテーブルデザインは何ですか?

私は、ユーザーの詳細は、IEのようにそれは私が単一のテーブルでこれを維持することができると思っています。私は2つの異なるテーブル

USERS 
ID| NAME 

MEMBERSHIPS 
USER_ID|MEMBERSHIP_TYPE|LAST_PAYMENT_DATE|ACTIVE_TILL|TRANSACTION_ID 

そして店に分離する必要がないの

USERS 
ID| NAME| MEMBERSHIP_TYPE| LAST_PAYMENT_DATE| ACTIVE_TILL| TRANSACTION_ID 

を第3のテーブルにおける支払いの履歴。私はここで定期的な請求を使用しています。

+0

これを別のテーブルに入れると、ユーザーが複数のメンバシップ層にサインアップしたい場合など、将来の使用のためにスケーラビリティが向上します。 – evasilchenko

答えて

2

更新履歴を見ることができるようにするため、ユーザーリストから支払いトランザクションを分離したいと考えています。あなたは、支払いをしたり、払い戻しを要求したり、もう一度やりとりしたり、会員期限を切ったり、更新したりすることができます。このアクティビティの履歴を保持するトランザクションテーブルを保持せずに、顧客サービスや会計上の問題を解消できないことがあります。

有料のメンバーシップ(将来的に安全ではないことが想定される)があり、ストアドプロシージャまたはトリガーを使用してトランザクションラッパー内のデータを同期させるなど、適切な手続き型コントロールを配置すると仮定すると、メンバーシップタイプを非正規化し、USERSテーブルで日付までアクティブにします。このタイプの冗長性は、運用パフォーマンスに役立ちますが、冗長データが同期しないようにすると、非常に危険です。冗長性を持たずに試してみることをお勧めします。次に、USERSの非正規化フィールドを使用する前に実用的なパフォーマンスの問題があるかどうかを確認してください。