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 :

Cardinalité site e-commerce entre article et ligne de commande [MCD]


Sujet :

Schéma

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    435
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 435
    Points : 173
    Points
    173
    Par défaut Cardinalité site e-commerce entre article et ligne de commande
    Bonjour,

    J'ai ce MCD :

    Nom : TP-SPRING-WEB-V2.jpg
Affichages : 126
Taille : 125,2 Ko

    Mais je ne comprends pas la cardinalité article (1,n) --- to have --- (1,1) line_order, comment un article peut-il avoir plusieurs lignes de commandes car dans un site de e-commerce on a un panier et si je veux acheter une quantité de disons dix crayons de papiers, j'ai normalement juste à ajouter sur la ligne de commande la quantité que je veux donc j'ai bien une ligne de commande pour l'achat de dix crayons de papiers, et non pas 10 lignes de commandes qui contiendront chacune d'elle une quantité de 1 seul crayon de papier.

    Normalement la règle de gestion devrait être :
    - un article peut avoir 0 et 1 seul ligne de commande.
    - une commande peut avoir que 1 et 1 seul article.

    Pourriez-vous me dire ce qu'il en ai.

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Bonjour hbx360,

    Vu votre MCD, Commande et Article sont confondus. Par exemple, l’article relève certes d’une catégorie, mais la quantité relève de la commande. Il faut modéliser Commande d’une part et Article d’autre part.

    A son tour, le panier contient les articles commandés plutôt que de lignes de commande.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 264
    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 264
    Points : 39 399
    Points
    39 399
    Billets dans le blog
    9
    Par défaut
    Bonjour,


    Citation Envoyé par fsmrel Voir le message
    Bonjour hbx360,

    Vu votre MCD, Commande et Article sont confondus.
    Je ne comprends pas cette remarque : vu la cardinalité maximale n de [BASKET] via (include) vers [LINE_ORDER], on a bien un panier (c'est à dire une commande) multi-lignes et donc multi-articles.
    D'ailleurs, pourquoi parler de "Line_order" mais de "basket", il serait plus cohérent de parler de "order_line" et "order" ou de "basket_line" et "basket".
    Ou mieux encore, sauf si le contexte est international, de choisir des noms français, ce qui donnerait "ligne de commande" et "commande"

    Par contre, la cardinalité minimale zéro de [BASKET] via (include) vers [LINE_ORDER] signifie qu'un panier peut n'avoir aucune ligne... ça me semble curieux, à expliquer, exemples à l'appui.
    Également, la cardinalité minimale un de [ARTICLE] via (to_have) vers [LINE_ORDER] signifie que tout article est commandé au moins une fois !
    Ça ne va pas : les nouveaux articles récemment entrés au catalogue n'ont encore jamais été vendus, il faut donc une cardinalité minimale de zéro.
    Et aussi, comme une ligne de commande ne peut exister sans la commande à laquelle elle se rattache, on a affaire à une entité type faible de la commande. Du coup, il serait judicieux d'identifier la ligne de commande relativement à la commande.
    Ce qui donne [ORDER_LINE] 1,1(R) --- (include) --- 1,n [ORDER]

    Par ailleurs, gérer le prix et la quantité d'articles en stock au niveau article signifie que le prix est indépendant du client, de la quantité commandée, de la saison... et que l'article n'est stocké que dans un et un seul lieu.
    À confirmer pour ces deux points.

    Enfin, vous n'avez pas modélisé la notion de facture ni de lignes de facture

    EDIT : il manque aussi l'adresse de livraison et l'adresse de facturation

  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 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Ave,

    Citation Envoyé par escartefigue Voir le message
    Je ne comprends pas cette remarque : vu la cardinalité maximale n de [BASKET] via (include) vers [LINE_ORDER], on a bien un panier (c'est à dire une commande) multi-lignes et donc multi-articles.
    Capitaine, je comprends ton étonnement
    J’ai tout bonnement confondu panier et chariot, engin que je poussais dans les rues de notre village, du temps où avec ma femme nous faisions les courses, il y a quelques soixante ans...
    Autres temps, autres usages...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  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 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Et aussi, comme une ligne de commande ne peut exister sans la commande à laquelle elle se rattache, on a affaire à une entité type faible de la commande. Du coup, il serait judicieux d'identifier la ligne de commande relativement à la commande.
    Ce qui donne [ORDER_LINE] 1,1(R) --- (include) --- 1,n [ORDER]
     
    L’identification relative a posé bien des problèmes à hbx360, coincé entre ce type d’identification et MySQL.
    Dans le post #52 (vois son MCD, association Avoir) de la discussion qu’il a ouverte ici, il a fait part de ses états d’âme quant à l’identification relative en conflit avec MySQL. Ayant plus d’un tour dans son sac, Paprick lui avait exposé dans le post #55 une solution de contournement (que du reste je n’arrive pas à mettre en oeuvre...)
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 702
    Points : 2 829
    Points
    2 829
    Par défaut
    Bonsoir François,
    Citation Envoyé par fsmrel Voir le message
     
    L’identification relative a posé bien des problèmes à hbx360, coincé entre ce type d’identification et MySQL.
    Dans le post #52 (vois son MCD, association Avoir) de la discussion qu’il a ouverte ici, il a fait part de ses états d’âme quant à l’identification relative en conflit avec MySQL. Ayant plus d’un tour dans son sac, Paprick lui avait exposé dans le post #55 une solution de contournement (que du reste je n’arrive pas à mettre en oeuvre...)
    Tu as bloqué à quel niveau pour la mise en œuvre de cette solution ?
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Salve,

    Retour sur le post #55 de la discussion ouverte par hbx360 (ici) :

    Citation Envoyé par Paprick Voir le message
    Looping permet quand même de s'en sortir sans modifier le code SQL manuellement (ce dont j'ai horreur comme tu le sais ! ).
    Pour cela, il faut retirer l'identification relative et demander (dans la même fenêtre cardinalité) l'intégration de la clé étrangère dans un index (que tu nommes comme tu veux).
    Ensuite, dans la classe d'entités MODELE, tu rajoutes modeleId dans le même index (il suffit d'indiquer le même nom dans la zone "Autre clé => Index), et tu obtiens ta clé alternative {constructeurId, modeleId} !
    C'est vrai que l'on ne devrait pas avoir besoin d'en passer par là, mais MySQL ne nous laisse pas le choix...
     
    Où trouve-t-on « la zone "Autre clé => Index » ? j’ai eu beau chercher...
     
    Cela dit, cette exigence de la part de MySQL d’une clé primaire mono-attribut est plus que suspecte. En effet, à l’occasion de la discussion traitant des cardinalités 1,n/1,n, je reviens sur le MCD proposé à l’époque (cf. post #45) :
     
     
     

    Le code SQL des tables Commande et LigneCommande :
     
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    create table Commande
    (
       commandeId int not null default 0
     , commandeNumero varchar(10) not null
     , commandeDate date not null
     , clientId smallint not null
     , constraint Commande_PK primary key(commandeId)
     , constraint Commande_AK unique(commandeNumero)
     , constraint Commande_Client_FK foreign key(clientId) references Client(clientId)
    );
     
    create table LigneCommande
    (
       commandeId int not null
     , ligneCommandeId smallint not null
     , quantite smallint not null
     , produitId smallint not null
     , constraint LigneCommande_PK primary key(commandeId, ligneCommandeId)
     , constraint LigneCommande_Commande_FK foreign key(commandeId) 
         references Commande(commandeId) on delete cascade
     , constraint LigneCommande_Produit_FK foreign key(produitId) 
         references Produit(produitId)
    ) ;
     

    MySQL (5.7) avait accepté ce code :
     
     
    Y a comme une embrouille quelque part chez hbx
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 702
    Points : 2 829
    Points
    2 829
    Par défaut
    Salut François,
    Citation Envoyé par fsmrel Voir le message
    Où trouve-t-on « la zone "Autre clé => Index » ? j’ai eu beau chercher...
    L'option apparait dans la fenêtre "Rubrique" quand tu coche "UNIQUE", et sur les liens des pattes 0,n ou 1,n.
    Mais, pour cela, tu dois mettre "Oui" à l'option "Proposer index composé" (dans la partie "MLD-SQL" de la fenêtre "Propriétés") .
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    435
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 435
    Points : 173
    Points
    173
    Par défaut
    Bonjour fsmrel, escartefigue, Paprick merci pour vos réponses toujours très instructives.
    Citation Envoyé par escartefigue Voir le message
    D'ailleurs, pourquoi parler de "Line_order" mais de "basket", il serait plus cohérent de parler de "order_line" et "order" ou de "basket_line" et "basket".
    En fait j'ai mis comme ça au pif

    Citation Envoyé par escartefigue Voir le message
    Enfin, vous n'avez pas modélisé la notion de facture ni de lignes de facture
    Oui parce que c'était pas forcément le but d'allé si loin dans la création de ce modèle car c'était pour un exo que j'ai fais en groupe pendant ma formation;

    Citation Envoyé par fsmrel Voir le message
    J’ai tout bonnement confondu panier et chariot
    Basket (Amazone met le mot basket) c'est bien le panier ou le chariot au choix, donc commande et panier ou chariot c'est la même chose ?

    Citation Envoyé par fsmrel Voir le message
    L’identification relative a posé bien des problèmes à hbx360, coincé entre ce type d’identification et MySQL.
    Dans le post #52 (vois son MCD, association Avoir) de la discussion qu’il a ouverte ici, il a fait part de ses états d’âme quant à l’identification relative en conflit avec MySQL. Ayant plus d’un tour dans son sac, Paprick lui avait exposé dans le post #55 une solution de contournement (que du reste je n’arrive pas à mettre en oeuvre...)
    Le quoi ???


    Citation Envoyé par fsmrel Voir le message
    L’identification relative a posé bien des problèmes à hbx360
    Oui carrément


    Citation Envoyé par fsmrel Voir le message
    Y a comme une embrouille quelque part chez hbx
    Désolé


    J'ai pas vraiment eu la réponse à ma question, est-ce qu'un article peut avoir plusieurs lignes de commande ?
    Pour moi une ligne de commande c'est ça :
    Nom : dev.com-forum-ex-lignecommande.png
Affichages : 40
Taille : 72,7 Ko

    Mais si j'ajoute le même article à mon panier donc j'ai 2 articles mais une seul ligne de commande non ?
    Nom : dev.com-forum-ex-lignecommande-2-articles.png
Affichages : 39
Taille : 72,9 Ko

    Sinon sa voudrait dire que j'ai 2 lignes de commande pour le même article acheté donc j'aurai un truc du genre :
    Nom : dev.com-forum-ex-2-lignecommande-2-meme-articles.png
Affichages : 39
Taille : 144,7 Ko

    Mais sur Amazon c'est pas le cas il y a une seul ligne de commande avec 2 article dedans.

    Sur Looping est-ce qu'on peut rajouter pour le SQL sans avoir à le faire à la main ENGINE=InnoDB ?

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Bonsoir,
     
    Citation Envoyé par hbx360 Voir le message
    Basket (Amazone met le mot basket) c'est bien le panier ou le chariot au choix, donc commande et panier ou chariot c'est la même chose ?
     
    Quand j’ai écrit ceci :
     
    Citation Envoyé par fsmrel Voir le message
    J’ai tout bonnement confondu panier et chariot, engin que je poussais dans les rues de notre village, du temps où avec ma femme nous faisions les courses, il y a quelques soixante ans...
    Autres temps, autres usages...
    Je vois que je dois apporter quelques précisions. Il y a donc bientôt une soixantaine d’années, quand nous faisions les courses avec ma femme, nous partions de la maison avec un chariot à 4 roues, vide. Nous nous arrêtions d’abord chez notre boulanger et déposions le pain et les gâteaux dans le chariot. 2eme étape chez Pierrot notre boucher, nous discutions le bout de gras, et déposions les biftecks, saucissons et autres charcuteries dans le chariot. 3e étape chez Mohamed pour les glaces et différentes confiseries, complétant le chariot. 4ème étape chez Tatave, l’occasion pour moi d’écluser une bière, tandis que mes fils dégustaient, l’un une grenadine qui pique et l’autre une menthe qui pique pas, tandis que dans la pièce à côté, ma femme discutait avec madame Tatave tout en choisissant ses légumes et bourrant le chariot.

    Je pense que nous n’avons pas la même conception de ce qu’est un chariot... Quant au basket, avec Tatave, on discutait des résultats (modestes) de l’équipe locale dans ce sport, et de ceux (outre-Atlantique) du (très) grand Lew Alcindor.

    Disons que chez chacun de nos commerçants, nous récupérions la note, histoire de tenir compte de ce que nous avions dépensé, article par article. Beaucoup plus tard, avec Amazon et compagnie, les modes d’achat et les parlottes avec les fournisseurs ont certes changé, en tout cas il n’y a que le porte-monnaie qui continue à se plaindre...
     
     
    Citation Envoyé par hbx360 Voir le message
    J'ai pas vraiment eu la réponse à ma question, est-ce qu'un article peut avoir plusieurs lignes de commande ?
     
    Je reprends le MCD du post #7 :
     
     
     

    L’entité-type LigneCommande contient un attribut quantité et ne fait référence qu’à un seul produit.

    Le produit Echo Show 5 est donc référencé une seule fois mais fera l’objet d’un achat en quantité = 2, une seule ligne de commande fera donc l’affaire.
     
     
    Citation Envoyé par hbx360 Voir le message
    Le quoi ???
     
    Merci de préciser le sens de votre question...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    435
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 435
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Bonsoir,
    Merci de préciser le sens de votre question...
    En fait c'était une façon rigolote de dire que comme j'avais eu pas mal de difficulté à comprendre l’identification relative (d'ailleurs toujours un peu), j'avais pas vraiment envie d'y entendre mais sur le ton de la plaisanterie.

    Je vais mettre en résolue puisque fsmrel tu as répondu à ma question.

    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/02/2015, 16h19
  2. Réponses: 4
    Dernier message: 11/10/2012, 14h58
  3. Réponses: 1
    Dernier message: 23/05/2012, 17h54
  4. Créer une passerelle entre un site e-commerce et un ERP
    Par sum41147 dans le forum Services Web
    Réponses: 1
    Dernier message: 04/01/2012, 14h04
  5. Fiche article dans site e-commerce
    Par waters dans le forum Langage
    Réponses: 5
    Dernier message: 22/08/2011, 14h04

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