Bonjour à tous,
Developpeur JS à la base et n’ayant jamais réalisé de MCD de cet envergure et n’étant pas très familier avec les MCD / MLD au quotidien, je serais ravie d’avoir quelques retours et critiques sur mon MCD avant de partir sur un truc bancale.
Le projet qui en découlera est un site de vente en ligne pour des biens : vêtements, artisanats, un petit peu d’épices (différents type de TVA).
C’est un petit projet modeste, mon premier site de vente en ligne , qui s’adressera a des personnes résidant en France uniquement dans un premier temps. Pas de paiement en plusieurs fois, pas de commandes pouvant entraîner des livraisons multiple et je ne souhaite pas non plus stocker les informations de paiement des clients pour faciliter leurs prochains achats.
Le MCD a été réalisé sous JMerise, le SGBDR reposera sur PostgreSQL 13 et le Back-end tournera sous Node.js .
Je ne me suis pas vraiment concentré sur les types des attributs puisque le script SQL que me proposera JMerise sera largement retouché, avec notamment la création de domaines sous Postgres via des REGEX, les attributs période seront des daterange sous Postgres.. etc.
Les règles de gestion sont en dessous, numérotées de 1 a 63. J’espère que les numéros sont assez lisible pour tous, dite le moi si c’est pas le cas, j’essaierais de rendre ça plus lisible.
Si le MCD est difficile à consulter dans sa globalité sur le forum, vous pouvez le visualiser et / ou le télécharger en .png sur cette URL : https://e.pcloud.link/publink/show?c...xkaNlzpSfcKmnk
Quelques petites infos en vrac pour une meilleur compréhension :
Les entités panier et ligne_panier ont pour vocation d’être utilisé a des fin d’analyses, du genre estimer le taux de transformation du site. Si le panier est transformé en commande, les entrées correspondantes dans la table panier et ligne_panier seront supprimé. Je ne suis pas certain encore d'utiliser ces deux tables liés au panier mais je trouve ça confortable de les avoir et de pouvoir les bosser plus tard si je le souhaite.
Le MCD est rédigé en très grande partie en français sauf 3 attributs, que j'ai beaucoup l'habitude d'utiliser en anglais : password, createdDate et UpdatedDate que je souhaiterais garder en anglais pour des raisons de praticité. Je serais l'unique et le seul gestionnaire de ce futur site, je me suis permis donc cette petite entorse aux bonnes pratiques … peut être à tord vous me direz*!
J'ai put faire de nombreuses erreurs dans la redondance ou dans les cardinalités entre facture livraison et commande. C’est ce qu’il me semblait le plus logique mais je ne suis pas vraiment sur de mon coup*! Et je voudrais surtout pas partir sur un truc bancale…
Je souhaiterais que ma facture affiche également les frais d'expédition, le nom du transporteur et la méthode de paiement. Par transitivité, je pensais les récupérer en remontant par la table client mais peut être que je dis des bêtises ou qu'il y a une autre façon de faire plus adéquate ?
J'ai peut être inséré beaucoup de createdDate et d'updatedDate, je ne sais pas si il sont toujours pertinent…
Merci d’avance pour votre temps, vos réponses et vos critiques !
# Regles de gestion MCD (en partant de "client" vers "panier")
R001 Un client peut avoir 0 ou plusieurs paniers.
R002 Un panier appartient a un, et un seul client.
R003 Un panier peut contenir aucun produit (ligne_panier) ou plusieurs ligne_panier.
R004 Une ligne_panier appartient a un et un seul panier.
R005 Une ligne_panier concerne un et un seul produit.
R006 Un produit peut être dans aucune ou plusieurs ligne_panier.
R007 Un produit peut être dans 0 ou plusieurs lignes (d'une commande / facture / livraison).
R008 Une ligne contient un et un seul produit.
R009 / R010 / R011 => "ligne_livraison", "ligne_commande" et "ligne_facture" hérite de "ligne" et possède tous les trois les même attributs hérité de "ligne". Les identifiants de ces trois entité sont dans l'entité ligne.
R012 Une ligne de livraison est toujours le fruit d'une ligne de commande.
R013 Une ligne de commande entraîne aucune ou une seule livraison. Pas de livraison multiple ici et une ligne de commande peut ne pas se traduire par une livraison si le produit n'est plus en stock (erreur de stock) ou si le client vient le chercher directement en boutique.
R014 Une ligne de commande peut n'engendrer aucune ligne de facture (si erreur de stock) ou une seule ligne de facture.
R015 Une ligne de facture provient d'une et une seule ligne de commande.
R016 Une ligne de livraison appartient a une et une seule livraison.
R017 Une livraison peut contenir une ou plusieurs ligne de livraison.
R018 Une ligne de commande appartient a une et une seule commande.
R019 Une commande peut contenir une ou plusieurs ligne de commande.
R020 Une ligne de facture est compris dans une et une seule facture.
R021 Une facture possède de une a plusieurs ligne de facture.
R022 Une livraison délivre un et un seul client. Il s'agit d'une entité faible qui dépend de "client". Bonne pratique contre I/O Bound.
R023 Un client peut recevoir aucune a plusieurs livraisons.
R024 Une commande est passé par un et un seul client. Il s'agit d'une entité faible qui dépend de "client".
R025 Un client passe aucune ou plusieurs commandes.
R026 Une commande comprend un ou plusieurs paiement. Les paiements multiples ne seront pas mis en place mais si une erreur survient suite a un premier paiement, le client pourra refaire un paiement lié a cette même commande.
R027 Un paiement appartient a une et une seule commande.
R028 Une facture est destiné un et un seul client. Il s'agit d'une entité faible qui dépend de "client".
R029 Un client peut détenir aucune ou plusieurs factures.
R030 Un client posséde de une adresse minimum a plusieurs adresses.
R031 Une adresse appartient à un et un seul client.
R032 Une adresse doit avoir une seule ville.
R033 Une ville peut avoir aucune a plusieurs adresses.
R034 Une ville est présente dans un et un seul pays.
R035 Un pays contient aucune ou plusieurs villes.
R036 Un code postale peut être associé a une ou plusieurs villes (exemple 54490 => 7 communes).
R037 Une ville peut avoir un ou plusieurs codes postaux (exemple => Metz a 3 codes postaux).
R038 Un client détient un et un seul privilège (rôle).
R039 Un privilège peut être possédé par aucun ou plusieurs clients.
R040 Un client peux ne rédiger aucun avis ou plusieurs avis.
R041 Un avis est rédigé par un et un seul client.
R042 Un avis ne concerne qu'un et un seul produit.
R043 Un produit peut posséder aucun ou plusieurs avis.
R044 Un produit est forcement dans une, et une seule catégorie.
R045 Une catégorie possède aucun ou plusieurs produits.
R046 Une catégorie peut avoir aucune ou plusieurs sous-catégorie.
R047 Une sous-catégorie appartient a une et une seule catégorie.
R048 Une sous catégorie peut posséder aucune ou plusieurs images.
R049 Une "sous-catégorie image" fait référence à une et une seule sous catégorie.
R050 Une catégorie peut ne posséder aucune ou plusieurs images.
R051 Une "catégorie image" fait référence à une et une seule catégorie.
R052 Un produit possède aucune ou plusieurs images.
R053 Une "image produit" fait référence à un et un seul produit.
R054 Un produit a une et une seule TVA.
R055 Une TVA ne peut s'appliquer à aucun ou plusieurs produits.
R056 Un produit peut avoir zéro a plusieurs réductions.
R057 Une réduction peut s'appliquer aucun à plusieurs produits.
R058 Un produit peut avoir aucun fournisseur (fait maison ou fournisseur inconnue, ou que l'on ne veut pas mettre en BDD) ou plusieurs.
R059 Un fournisseur fournit aucun produit (si le produit n'est plus en stock mais qu'il va bientôt le redevenir, on veut garder le fournisseur) ou plusieurs produits.
R060 Un produit peut avoir zéro stock ou un seul.
R061 Un stock concerne un produit et un seul.
R062 Un produit peut avoir aucune caractéristique ou une seule.
R063 Une "caractéristique" (qui peut en réalité en comprendre plusieurs : taille et couleur ici) appartient a un et un seul produit.
Si le MCD s'affiche mal => https://e.pcloud.link/publink/show?c...xkaNlzpSfcKmnk
Partager