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 :

Schémas basique database clients-commandes.


Sujet :

Schéma

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Schémas basique database clients-commandes.
    Bonjour à tous...

    Voilà, je me remets au SQL, bien que je n'y aie plus touché depuis des années et des années... Je crée pour l'instant de petites tables simples dans le but de tout remettre dans ma petite caboche ^^ Je vous expose mon problème :

    J'ai créé une database qui a pour but de gérer les commandes d'un magasin ( fictif ), dans cette db, j'ai créé :

    1 table Clients ( ID PK autoinc, nom, prenom, adresse ...)
    1 table produits ( ID PK autoinc, denomination, prix, reduction )
    1 table de jointure commandes (ID PK autoinc, ID_commande, ID_client FK, ID_produit FK)
    1 Vue pour voir qui passe commande, à partir de la table de jointure.

    Mon problème est que je ne vois pas trop comment je peux associer plusieurs produits à une commande, sans pour autant dédoubler l'information d'ID_commande dans ma table du meme nom. Sachant qu'un enum et un set sont limités à 64 enregistrements si mes souvenirs sont bons.

    Auriez vous une solution pour rendre ceci "Pretty" ?
    Merci d'avance...

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    tu passe simplement par une table de liaison

    avec une structure du genre:

    id, idcommande, idproduit

    ce qui te permet d'associer autan de produit que tu veux à une commande...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Salut et merci pour ta réponse

    Donc en gros :
    - une table de jointure pour enregistrer qui passe quelle numéro de commande
    - une table de jointure pour regrouper les produits d'une même commande

    C'est correct ?
    Merci.

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est l'idée...

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Avant de créer des tables, toujours faire un modèle de données !

    Le schéma classique est le suivant :
    client -0,n----passer----1,1- commande -1,n----concerner----0,n- produit

    Ce qui donne, en première approche, les tables suivantes :
    client (clt_id, clt_nom...)
    commande (cmd_id, cmd_id_client, cmd_date...)
    produit (prd_id, prd_reference, prd_nom...)
    cmd_concerner_prd (ccp_id_commande, ccp_id_produit, ccp_quantite, ccp_prix_ht...)

    Mais si tu dois ensuite gérer les factures et les livraisons qui peuvent ne concerner que certains produits d'une commande (livraisons partielles), alors il faut transformer l'association concerner en entité type "ligne_commande"
    client -0,n----passer----1,1- commande -1,n----avoir----(1,1)- ligne_commande -(1,1)----concerner----0,n- produit


    Le seul changement est sur la table cmd_concerner_prd qui devient la table :
    ligne_commande (lc_id_commande, lc_id_produit, lc_quantite, lc_prix_ht...)

    fsmrel dirait aussi qu'il est préférable d'utiliser l'identification relative (cardinalités entre parenthèses qui entraîne la propagation des identifiants entre les tables) carrément depuis le client.
    client -0,n----passer----(1,1)- commande -1,n----avoir----(1,1)- ligne_commande -(1,1)----concerner----0,n- produit

    Les tables deviennent alors celles-ci :
    client (clt_id, clt_nom...)
    commande (cmd_id_client, cmd_numero, cmd_id_client, cmd_date...)
    produit (prd_id, prd_reference, prd_nom...)
    ligne_commande (lc_id_client, lc_numero_commande, lc_id_produit, lc_quantite, lc_prix_ht...)

    Ce principe facilite l'écriture de certaines requêtes et est plus performant avec de grosses quantités de données grâce à une économie des jointures dans les requêtes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Hmmmm, je vois... Merci CinePhil,

    Je vois parfaitement ou tu veux en venir, de plus tu as raison, j'aurais du faire une petite analyse avant de foncer tête baissée :/

    Néanmoins, en ce qui concerne le prix HT, je pense qu'il devrait se trouver à l'unité dans ma table produits, le prix final pourra être formaté via programmation avant l'affichage, non ?

    Merci pour vos réponses en tout cas

  7. #7
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    oui tu peux faire le calcul grace à ce que tu rapatries des jointures...

    dans ta table ligne_commande avec la quantité tu as ce qu'il te faut...

    après, c'est juste la construction de ta requête qui va te permettre de t'adapter à la structure...

    perso je suis aussi assez pour ne pas mettre le prix dans la ligne de commande sauf si c'est déjà ton résultat calculé (prix total pour la ligne en fonction de la quantité) car ça te simplifie alors la requête finale à faire

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par nux00 Voir le message
    Néanmoins, en ce qui concerne le prix HT, je pense qu'il devrait se trouver à l'unité dans ma table produits, le prix final pourra être formaté via programmation avant l'affichage, non ?
    Il peut bien sûr y avoir un prix tarif dans la table produit mais un produit peut être vendu à un prix différent du tarif. de plus, quand le prix du produit change, les commandes passées elles ne doivent pas changer. C'est surtout pour ça qu'il faut mémoriser le prix vendu.
    On peut :
    - directement mémoriser pour chaque ligne le prix unitaire vendu ;
    - mémoriser le prix unitaire tarif + l'éventuelle remise accordée sur la ligne de commande, en pourcentage ou en argent.

    Il peut aussi y avoir une remise globale sur la commande qui serait donc une colonne de la table commande.

    Je suis allé au plus simple dans mon schéma mais bien d'autres choses peuvent être nécessaires dans les tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Oui, tu as raison, je voulais commencer simple, c'est pour cela que je n'y ai pas pensé ^^.

    Merci pour vos réponses en tout cas

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/12/2011, 12h20
  2. Table client, commande nombre de client avec n commandes
    Par sakini dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/06/2011, 10h01
  3. Programme Client/Commande problème de contraintes
    Par skulled dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 01/04/2010, 13h20
  4. Réponses: 6
    Dernier message: 09/11/2005, 17h29
  5. [LG]plantage sur une commande basique !
    Par Jeff on the web dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2004, 19h07

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