J'aimerais savoir comment concevoir un système logiciel d'abonnement mensuel dans une base de données . Ces systèmes sont largement utilisés partout sur Internet, bien que je ne trouve pas beaucoup de choses sur la conception de bases de données.
Dans mon cas, ces éléments (et peut-être d'autres que j'ai oubliés) doivent être inclus:
En plus de la conception de la base de données, certains déclencheurs doivent être configurés pour effectuer cette opération (?).
Mes points de douleur:
Remarque
Je n'expose volontairement pas mes besoins dans les détails car de cette façon, le débat peut rester générique et peut être plus utile pour les autres.
Merci pour l'aide.
J'utiliserais ce modèle
Vos clients
Client
------
Client ID
Name
...
Vos plans (vous pouvez définir de nouveaux plans à votre guise) ... Je rajoute un Price_per_year si vous souhaitez proposer un rabais si le client achète 12 mois en une seule fois (mais ce n'est qu'une idée).
Plan
------
Plan ID
Name
Credits_per_month
Price_per_month
(Price_per_year)
Vos abonnements
Subscriptions
------
Subscription ID
Client ID
Plan ID
Subscription_start_timestamp
Subscription_end_timestamp
Compte tenu de ce modèle, j'utiliserais 1 ligne par client et par plan.
Lorsqu'un client souscrit à une offre telle que "Premium avec 1er mois gratuit!", Votre base de données se présente comme suit:
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
Lorsqu'un client se désabonne le 1er juillet, mettez à jour la fin de la colonne dans votre table Subscription avec le mois et l'année uniquement (car vous avez prédéfini le jour et l'heure).
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
Pour savoir si un client ne se désabonne pas, vous pouvez utiliser ceci:
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
Assurez-vous que vous ne pouvez pas avoir 2 abonnements pour un client en même temps.
Cela vous permet de gérer automatiquement l'abonnement mensuel dans votre application , mais pas avec votre compte bancaire/Paypal.
Mais certaines banques vous proposent deux services: - Débit unique - Débit périodique
Le second vous permettrait de gérer l’abonnement mensuel.
Je voudrais utiliser une conception de table relationnelle et une base de données relationnelle.
J'aurais une table de client.
Client
------
Client ID
Client Last Name
Client First name
...
J'aurais une table d'abonnement
Subscription
------------
Subscription ID
Client ID
Subscription Purchased Time stamp
Subscription Started Time stamp
Subscription Ends Time stamp
J'aurais une table d'achat
Purchase
--------
Purchase ID
Subscription ID
Payment method
...
Maintenant pour répondre à vos questions. Vous ne devriez poser qu'une question à la fois.
Laquelle devrait être une ligne dans la base de données: l'abonnement month_subscription (c'est-à-dire 1 ligne par client par mois) ou l'abonnement lui-même (c'est-à-dire 1 ligne par client)?
Une ligne par abonnement par mois.
Comment gérez-vous le renouvellement automatique de l'abonnement mensuel?
Netflix débite mon compte Paypal tous les mois. Vous pouvez faire la même chose avec Paypal ou avec une carte de crédit. Si vous acceptez les cartes de crédit, vous devrez prendre des dispositions avec votre banque, un service de traitement de cartes de crédit ou Paypal.
Comment gérez-vous la conception des paiements si vous envisagez d'utiliser des services tels que Paypal pour gérer les paiements mensuels automatiques?
Netflix débite mon compte Paypal tous les mois. Tu pourrais faire la même chose.
En regardant la réponse acceptée, j'ajouterais une autre table dans laquelle tous les changements ou mises à jour d'un abonnement ou d'un plan seraient stockés pour référence ultérieure. De cette façon, vous avez un journal clair sur quand et quels plans ont été sélectionnés pour quelle période.
Je m'assurerais que la table d'abonnement contienne les variables qui vous indiquent si elle est active ou non, à quelle date elle est payée et toutes autres données possibles dont vous auriez besoin dans les opérations quotidiennes.
La table supplémentaire vous assurera de pouvoir recréer n’importe quel abonnement à tout moment, si nécessaire.