2011-05-09 4 views
2

Je construis un site Web et je chargerai mes clients de l'utiliser. Je pense à avoir 6 options de licence mensuelles ou annuelles et il y aura quelques variantes de licences disponibles chacune accordant différents types d'accès au site.Licence d'utilisation du site Web et du schéma de la base de données des produits

Aussi, je vais avoir quelques options supplémentaires que vous pouvez ajouter à l'achat de leur licence. Ce serait des achats ponctuels plutôt des produits plutôt que des licences. Ils sont plus d'add-ons pour le site Web qui permettent plus de fonctionnalités. Une fois acheté, vous pouvez le garder. Donc, tout est basé sur le site, il n'y a pas d'expédition à s'inquiéter. Ce sera affiché dans une sorte de panier d'achat où ils peuvent choisir ce qu'ils veulent ensuite envoyé à Paypal pour le traitement.

Je me demandais juste comment je modéliserais cela correctement dans ma base de données? Jusqu'à présent, je suis venu avec:

Database schema

Fondamentalement, j'ai essayé de mettre les licences et les produits dans la même table et utilisé une colonne de drapeau (de licence_or_product) de faire la distinction entre les deux. Cela aiderait à l'affichage sur le site Web s'il s'agit d'un produit ou d'une licence.

Est-il utile d'avoir les champs * offer_start_date * et * offering_end_date * de la licence? J'essaie de l'obtenir afin que je puisse expirer cette offre si je veux faire une nouvelle offre de licence avec un prix différent. De cette façon, les clients qui ont déjà acheté la licence à ce prix restent toujours à ce prix. Si je veux changer le prix, je vais définir la date de fin de l'offre à aujourd'hui, puis créer une nouvelle ligne licence_products avec un prix inférieur mais end_date dans le futur. Est-ce la bonne façon de le faire? Ou modifiez-vous simplement le prix de l'article directement? Je pense simplement que si le prix change, alors le client veut un remboursement pour cette licence, comment suivez-vous combien ils ont payé pour cette licence? Le champ amount_paid me dirait combien coûtait l'ensemble de la commande mais pas le prix original de la licence qui a maintenant changé. Ai-je besoin d'un historique de tous les changements de prix des produits?

Autre chose que je ne sais pas comment faire, disons qu'ils ont acheté une licence pour utiliser le site pendant un an. Comment puis-je retirer quelle est la licence la plus récente? Disons que je les ai commencé avec une licence d'essai de 30 jours, puis ils achètent une licence annuelle. Dois-je invalider immédiatement la licence d'évaluation? Je pense que je veux seulement une licence valide à la fois. Donc, s'ils achètent une autre licence avant la fin de l'ancien, je ne sais pas comment mon programme devrait gérer cela.

Toute aide très appréciée. Je vous remercie!

P.S. Voici le schéma de base de données SQLyog et SQL si vous voulez essayer de le retravailler un peu.

sql db extract

SQLyog schema

Répondre

3

Je pense que vous devez créer les 3 tableaux suivants: 1.
client (client ou peu importe sens pour vous),
2. licence et
3. customer_license .

Et je suggère les champs suivants pour la table customer_license:

  • id (certains auto_increment int)
  • customer_id (certains int) FK
  • license_id (certains int) FK
  • décimal price_offered (7,2) (avec la précision dont vous avez besoin)
  • expiration_date date
  • active tinyint (1)
  • datetime created_at
  • datetime updated_at

Cette façon, vous pouvez suivre tous les détails du client avec la licence que vous leur a offert: ce que vous avez offert? quand vous avez offert? quand expire-t-il? prix offert? la licence est active? Bonne chance

+0

Ok, merci pour cela. Cela a du sens pour les licences. Comment puis-je marquer si ils ont payé pour la licence ou non? Un autre champ de colonne appelé amount_paid? Ou ai-je besoin d'une table de paiements séparée? Je me demandais aussi comment cela fonctionnerait avec les «produits» que je vends aussi qui ne sont pas classés comme une licence et plus d'un achat unique qui n'expire pas? – zuallauz

+1

Je pense que le fait d'avoir une table de licence vous permet de créer une table "produits" et un autre type "product_type" ce serait la façon "stricte" de le faire, je pense que cela vous donne de la flexibilité (ou non) licences et produits. Et si vous voulez suivre si le client a payé ou non peut-être vous devriez ajouter une colonne "paid tinyint (1)" si c'est 1 cela signifie qu'il/elle a payé et si c'est 0 cela signifie qu'il/elle n'a pas payé. J'espère que ça aide. – PachinSV

+0

J'ai bien travaillé maintenant. Merci pour l'aide. – zuallauz

Questions connexes