IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Demande d'aide MCD - ecommerce


Sujet :

Schéma

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2023
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Demande d'aide MCD - ecommerce
    Bonjour,

    Pour commencer, je tiens a vous remercier d'avance pour l'aide que vous allez m'apporter. Je suis débutant et je voudrais apprendre et comprendre comment on conçoit une base de données.

    Je sais que la conception est une partie très importante pour la réalisation de projets, mais lors de ma formation de développeur web, ce sujet a été très peu traité et j'estime qu'il est important. J'aimerais vraiment comprendre les besoins de réalisation d'une application et c'est pour cela que je souhaite réaliser une application e-commerce avec livraison. Il s'agirait d'un site de type "fleuriste" qui vendrait des fleurs et des bouquets. Mon but est ici d'échangé directement avec vous afin de comprendre à travers nos échanges et améliorer ma compréhension.

    J'ai réalisé les règles de gestions, je ne sais pas si elles sont complètes, suffisantes ou même correctes.

    Est-ce qu’un utilisateur possède obligatoirement un adresse? Non, si l’utilisateur est un des admin du site (rôle=1) alors pas besoin d’adresse.
    Est-ce qu’un utilisateur peut posséder plusieurs adresse? OUI
    La même adresse peut appartenir à plusieurs personnes. OUI
    Est-ce qu’une catégorie peut ne posséder aucun articles? OUI
    Est-ce qu’une catégorie peut posséder plusieurs articles? OUI
    Est-ce qu’un article peut n’appartenir à aucune catégorie? NON
    Est-ce que un article doit appartenir à au moins une catégorie? OUI
    Est-ce que un article peut appartenir à plusieurs catégories? NON

    Une commande peut ne pas avoir de statut? NON
    Une commande doit avoir un statut? OUI
    Une commande peut avoir plusieurs statut simultanément? NON
    Un statut peut n’appartenir à aucun commande? OUI
    Un statut peut appartenir à plusieurs commande? OUI

    Une commande peut ne pas avoir de méthode de paiement? NON
    Une commande peut avoir plusieurs méthode de paiement simultanément? NON
    Une commande doit avoir une méthode de paiement? OUI
    Une méthode de paiement peut n’avoir été choisi par aucune commande? OUI
    Une méthode de paiement peut être choisie par plusieurs commandes? OUI

    Une commande peut contenir aucun article? NON
    Une commande doit contenir au moins un article? OUI
    Une commande peut contenir plusieurs articles? OUI
    Un article peut n’appartenir à aucun commande? OUI
    Un article doit appartenir à au moins une commande? NON
    Un article peut appartenir à plusieurs commandes? OUI

    Un utilisateur peut passer 0 commande? OUI
    Un utilisateur doit passer au minimum 1 commande? NON
    Un utilisateur peut passer plusieurs commande? OUI
    Une commande peut être passée par aucun utilisateur? NON
    Une commande doit être passée par au moins 1 utilisateur? OUI
    Une commande peut être passée par plusieurs utilisateurs? NON
    une commande peut plusieurs produits ? OUI
    une commande peut avoir zéro produit NON

    Une ville peut n’appartenir à aucun pays*? NON
    Une ville peut appartenir à plusieurs pays*? NON
    Une ville doit appartenir à un pays*? OUI
    Un pays peut n’avoir aucune ville*? NON
    Un pays peut avoir plusieurs villes*? OUI

    Un article peut n’avoir aucun commentaire*? OUI
    Un article peut avoir plusieurs commentaire*? OUI
    Un client peut passer une ou plusieurs commandes ? OUI
    Un client peut rédiger plusieurs commentaire*? OUI
    Un client ne rédiger aucun commentaire*? OUI
    Un client peut rédiger plusieurs commentaires pour le un article commandé*? NON
    Un client peut ne pas laisser de note sur un article commandé*? OUI
    Un client peut laisser plusieurs notes sur un même article dans une même commande*? NON
    Un article peut avoir plusieurs commentaires*? OUI
    Un article peut n’avoir aucun commentaire*? OUI
    Un client peut rédiger plusieurs commentaires*? OUI
    Un client peut ne rédiger aucun commentaire*? OUI
    Un client peut rédiger plusieurs commentaires pour un même article dans une même commande? NON
    Un client puisse gérer son panier afin de rajouter un ou des produits ? OUI

    Le panier peut posséder aucun produit à plusieurs produits ? OUI


    J'ai également réalisé une première version du MCD avec Looping qui demande certainement a être amélioré

    Je rencontre plusieurs problématiques, il y en a certainement d'autres que je n'ai pas encore remarqué:
    • Je n'arrive pas à savoir si je dois intégrer une table panier où non,
      Je m'explique le panier sera réalisé a l'aide de la session de l'utilisateur, donc ma question est-ce que le panier doit figurer dans le MCD ?
      je pense que oui et qu'au moment ou le client appuis sur la touche commander la table commande prendra le relais.
    • Je ne sais pas si je dois créer une table produit ou faire (comme c'est le cas actuellement) une table "fleur" et une table "bouquet"
    • J'ai également des problème sur tout ce qui concerne la commande, la livraison, la facture, les commentaire et les notes des produits.
    • Je ne sais pas comment doit être structuré tout ce qui touche à la commande et facture
    • Je ne sais pas comment structuré les images pour les produits



    Je vous mets en pièce jointe mon MCD et je vous donne ma vision de mon projet concernant les partie ou j'ai besoin d'aide.

    Merci beaucoup d'avance.
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 377
    Points : 39 852
    Points
    39 852
    Billets dans le blog
    9
    Par défaut
    Bonjour Kotoni et bienvenue dans ce forum.

    Oui, la modélisation des données est une étape essentielle, une base mal modélisée est la source du mécontentement des utilisateurs comme des techniciens : avec une base mal modélisée, les données sont peu fiables, les performances d'accès sont dégradées, les requêtes sont complexes et chaque évolution coûte un bras.

    En commençant par citer les règles de gestion, vous avez la bonne approche, bravo.
    Pour vous faciliter la tâche et celle des relecteurs, il est préférable de formuler les règles de gestion sous la forme : identifiant de règle / sujet / verbe / complément

    Ainsi, plutôt que de citer toutes ces règles

    Citation Envoyé par Kotoni Voir le message
    Un utilisateur peut passer 0 commande? OUI
    Un utilisateur doit passer au minimum 1 commande? NON
    Un utilisateur peut passer plusieurs commande? OUI
    Une commande peut être passée par aucun utilisateur? NON
    Une commande doit être passée par au moins 1 utilisateur? OUI
    Une commande peut être passée par plusieurs utilisateurs? NON
    Cette formulation est plus claire et plus concise :
    RCO001A : une commande est effectuée par un et un seul utilisateur
    RCO001B : un utilisateur peut effectuer zéro à plusieurs commandes


    Et pour les articles, il faut remplacer et compléter
    Citation Envoyé par Kotoni Voir le message
    Un article peut n’avoir aucun commentaire*? OUI
    Un article peut avoir plusieurs commentaire*? OUI
    Par :
    RAR001A : un article peut être concerné par zéro à plusieurs commentaires
    RAR001B : un commentaire concerne un et un seul article

    Le verbe qu'on a utilisé dans les règles de gestion permet de nommer l'association concernée.
    Par exemple, l'association entre le type d'entités [COMMANDE] et le type d'entités [UTILISATEUR] sera nommée (effectuer).

    Dans un premier temps, concentrez-vous sur le coeur du métier, par exemple les commandes, les articles et les clients, le modèle pourra être enrichi progressivement.

    Bon courage et à très bientôt

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 114
    Points : 31 609
    Points
    31 609
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Il y a pas mal de choses à dire à propos de votre MCD.

    Pour commencer :

    Votre association concerne-3 exprime le fait qu’un commentaire concerne un bouquet ET une fleur, alors qu’il doit concerner SOIT un bouquet, SOIT une fleur. Il est préférable de mettre en oeuvre un entité-type Commentaire, avec les règles de gestion suivantes :  

    (RGx) Un commentaire peut concerner un bouquet,

    (RGy) Un commentaire peut concerner une fleur.

    Une contrainte de partitionnement (XT) permet de garantir qu’un commentaire concerne soit un bouquet soit une fleur :



    Mutatis mutandis, ce qui précède vaut aussi pour les notations (ratings) et les stocks.

    A suivre...

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 114
    Points : 31 609
    Points
    31 609
    Billets dans le blog
    16
    Par défaut
    Un jeu d’essai partiel (SQL Server). Notez la contrainte de partitionnement (XT) prise en charge dans la table Commentaire :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONSTRAINT Commentaire_soit_bouquet_soit_fleur
    CHECK 
          (bouquetId is not NULL AND fleurId is NULL OR bouquetId is NULL AND fleurId is not NULL)

    CREATE TABLE Role
    (
       roleId INT IDENTITY
     , roleNom VARCHAR(50) NOT NULL
     , CONSTRAINT Role_PK PRIMARY KEY(roleId)
    ) ;
    
    insert into Role values
       ('admin'), ('client')
    ;
    select * from Role ;
    
    CREATE TABLE Adresse
    (
       adresseId INT IDENTITY
     , adresseLigne1 VARCHAR(50) NOT NULL
     , adresseLigne2 VARCHAR(50) NOT NULL
     , CONSTRAINT Adresse_PK PRIMARY KEY(adresseId)
    ) ;
    
    insert into Adresse values
       ('3 rue qui monte', '75022, Pantruche')
     , ('9 allée des roses', '75023, Paname')
    ;
    
    select * from Adresse ;
    
    CREATE TABLE Utilisateur
    (
       utilisateurId INT IDENTITY
     , utilisateurNom VARCHAR(50)
     , utilisateurPrenom VARCHAR(50)
     , roleId INT NOT NULL
     , CONSTRAINT Utilisateur_PK PRIMARY KEY(utilisateurId)
     , CONSTRAINT Utilisateur_Role_FK FOREIGN KEY(roleId) 
           REFERENCES Role(roleId)
    ) ;
    
    insert into Utilisateur values
       ('Kotoni', '', 1), ('Naudin', 'Fernand', 2), ('Volfoni', 'Raoul', 2), ('Volfoni', 'Paul', 2)
    ;
    select u.utilisateurPrenom, u.utilisateurNom, r.roleNom 
    from Utilisateur as u
    join Role as r on u.roleId = r.roleId
    ;
    
    CREATE TABLE Domicilier
    (
       utilisateurId INT
     , adresseId INT
     , CONSTRAINT Domicilier_PK PRIMARY KEY(utilisateurId, adresseId)
     , CONSTRAINT Domicilier_Utilisateur_FK FOREIGN KEY(utilisateurId) 
           REFERENCES Utilisateur(utilisateurId)
     , CONSTRAINT Domicilier_Adresse_FK FOREIGN KEY(adresseId) 
           REFERENCES Adresse(adresseId)
    ) ;
    
    CREATE TABLE Statut
    (
       statutId INT IDENTITY
     , statutNom VARCHAR(50) NOT NULL
     , CONSTRAINT Statut_PK PRIMARY KEY(statutId)
    ) ;
     
    insert into Statut values
       ('en cours'), ('livrée')
    ;
    select * from Statut ;
    
    CREATE TABLE Commande
    (
       commandeId INT IDENTITY
     , utilisateurId INT NOT NULL
     , commandeDate DATE NOT NULL
     , statutId INT NOT NULL
     , CONSTRAINT Commande_PK PRIMARY KEY(commandeId)
     , CONSTRAINT Commande_Utilisateur_FK FOREIGN KEY(utilisateurId) 
           REFERENCES Utilisateur(utilisateurId)
     , CONSTRAINT Commande_Statut_FK FOREIGN KEY(statutId) 
           REFERENCES Statut(statutId)
    ) ;
    
    insert into Commande values
       (2, '01/05/2022', 2), (2, '01/06/2023', 1)
     , (3, '14/07/2022', 2), (4, '31/05/2023', 1)
    ;
    select commandeId as NumeroCommande
         , utilisateurPrenom as clientPrenom
         , utilisateurNom as clientNom
         , commandeDate
         , statutNom as Statut
    from Commande as c
    join Utilisateur as u on c.utilisateurId = u.utilisateurId
    join Statut as s on c.statutId = s.statutId
    ;
    
    CREATE TABLE Bouquet
    (
       bouquetId INT IDENTITY
     , bouquetNom VARCHAR(50) NOT NULL
     , bouquetPrix DECIMAL(5,2) NOT NULL
     , CONSTRAINT Bouquet_PK PRIMARY KEY(bouquetId)
    ) ;
    insert into Bouquet values
       ('bouquet de saison', 30), ('bouquet parfumé', 32), ('bouquet normand', 30)
     , ('bouquet parisien', 34), ('bouquet breton', 32), ('bouquet provençal', 33)
    ;
    select bouquetNom, bouquetPrix
    from Bouquet
    ;
    CREATE TABLE CommandeLigne
    (
       commandeId INT
     , commandeLigneId SMALLINT
     , commandeLigneQte INT NOT NULL
     , bouquetId INT NOT NULL
     , CONSTRAINT CommandeLigne_PK PRIMARY KEY(commandeId, commandeLigneId)
     , CONSTRAINT CommandeLigne_Commande_FK FOREIGN KEY(commandeId) 
           REFERENCES Commande(commandeId)
     , CONSTRAINT CommandeLigne_Bouquet_FK FOREIGN KEY(bouquetId) 
           REFERENCES Bouquet(bouquetId)
    ) ;
    
    insert into CommandeLigne values
       (1, 1, 2, 1), (1, 2, 1, 3)
     , (2, 1, 1, 6)
    ;
    select commandeId as NumeroCommande
         , commandeLigneId as numeroLigne
         , commandeLigneQte as Quantite
         , bouquetNom 
    from CommandeLigne as l
    join Bouquet as b on l.bouquetId = b.bouquetId 
    ;
    
    CREATE TABLE Fleur
    (
       fleurId INT IDENTITY
     , fleurNom VARCHAR(50) NOT NULL
     , fleurPrix DECIMAL(5,2) NOT NULL
     , CONSTRAINT Fleur_PK PRIMARY KEY(fleurId)
     , CONSTRAINT Fleur_AK UNIQUE(fleurNom)
    ) ;
    
    insert into Fleur values
       ('lys', 2), ('pivoine', 3), ('rose', 3)
    ;
    select * from Fleur ;
    
    CREATE TABLE Couleur
    (
       couleurId INT IDENTITY
     , couleurNom VARCHAR(50) NOT NULL
     , CONSTRAINT Couleur_PK PRIMARY KEY(couleurId)
     , CONSTRAINT Couleur_AK UNIQUE(couleurNom)
    ) ;
    
    CREATE TABLE fleur_couleur
    (
       fleurId INT
     , couleurId INT
     , CONSTRAINT fleur_couleur_PK PRIMARY KEY(fleurId, couleurId)
     , CONSTRAINT fleur_couleur_Fleur_FK FOREIGN KEY(fleurId) 
           REFERENCES Fleur(fleurId)
     , CONSTRAINT fleur_couleur_Couleur_FK FOREIGN KEY(couleurId) 
           REFERENCES Couleur(couleurId)
    ) ;
    
    CREATE TABLE Commentaire
    (
       commentaireId INT IDENTITY
     , utilisateurId INT NOT NULL
     , commentaireTitre VARCHAR(50) NOT NULL
     , commmentaireContenu VARCHAR(max) NOT NULL
     , commentaireDate DATE NOT NULL
     , bouquetId INT
     , fleurId INT
     , CONSTRAINT Commentaire_PK PRIMARY KEY(commentaireId)
     , CONSTRAINT Commentaire_Bouquet_FK FOREIGN KEY(bouquetId) 
           REFERENCES Bouquet(bouquetId)
     , CONSTRAINT Commentaire_Fleur_FK FOREIGN KEY(fleurId) 
           REFERENCES Fleur(fleurId)
     , CONSTRAINT Commentaire_Utilisateur_FK FOREIGN KEY(utilisateurId) 
           REFERENCES Utilisateur(utilisateurId)
     , CONSTRAINT Commentaire_soit_bouquet_soit_fleur CHECK 
          (bouquetId is not NULL AND fleurId is NULL OR bouquetId is NULL AND fleurId is not NULL)
    ) ;
    
    insert into Commentaire values
       (2, 'Quel beau bouquet !', 'C''est ma femme qui va être contente !', '10/05/2022', 1, NULL)
     , (2, 'Quel beau bouquet !', 'C''est ma femme qui va être contente !', '10/05/2022', NULL, 2)
    -- , (2, 'Quel beau bouquet !', 'C''est ma femme qui va être contente !', '10/05/2022', NULL, NULL)
    -- , (2, 'Quel beau bouquet !', 'C''est ma femme qui va être contente !', '10/05/2022', 1, 2)
    ;
    select utilisateurPrenom, utilisateurNom
         , commentaireTitre as Titre, commmentaireContenu as Contenu
         , commentaireDate as DateCommentaire
         , coalesce(b.bouquetNom, '/') as Bouquet
         , coalesce(f.fleurNom,'/') as Fleur
    from Commentaire as c
    join Utilisateur as u on c.utilisateurId = u.utilisateurId
    left join Bouquet as b on c.bouquetId = b.bouquetId
    left join Fleur as f on c.fleurId = f.fleurId  
    ;
    
    CREATE TABLE Composer
    (
       bouquetId INT
     , fleurId INT
     , CONSTRAINT Composer_PK PRIMARY KEY(bouquetId, fleurId)
     , CONSTRAINT Composer_Bouquet_FK FOREIGN KEY(bouquetId) 
           REFERENCES Bouquet(bouquetId)
     , CONSTRAINT Composer_Fleur_FK FOREIGN KEY(fleurId) 
           REFERENCES Fleur(fleurId)
    ) ;

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 114
    Points : 31 609
    Points
    31 609
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Citation Envoyé par Kotoni
    le panier sera réalisé a l'aide de la session de l'utilisateur, donc ma question est-ce que le panier doit figurer dans le MCD ?
    je pense que oui et qu'au moment ou le client appuis sur la touche commander la table commande prendra le relais.
    Je suppose que le contenu du panier d’un client est obtenu à partir des données de la table Commande et de celles de la table des lignes de la commande attachées à ce client. En ce cas, la mise en oeuvre d’une table de base Panier serait inessentielle, inutile, tout au plus pourrait-on activer une vue (jouant le rôle de table temporaire) à l’occasion de la session déclenchée par l’utilisateur. Une telle vue étant composée des opérations relationnelles (jointures, etc.) accédant aux tables de base Commande, CommandeLigne, Bouquet, etc. N’hésitez pas à faire vos remarques à ce sujet.

Discussions similaires

  1. [MCD] Demande d'aide MCD
    Par Xeus dans le forum Schéma
    Réponses: 1
    Dernier message: 14/05/2022, 20h29
  2. Demande d'aide MCD
    Par GasconWarrior dans le forum Schéma
    Réponses: 2
    Dernier message: 26/04/2022, 11h47
  3. Demande d'aide MCD
    Par GasconWarrior dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 21/04/2022, 12h45
  4. demande d'aide MCD
    Par minerva dans le forum Merise
    Réponses: 2
    Dernier message: 06/06/2011, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo