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

PHP & Base de données Discussion :

Meilleur façon pour enregistrer une commande (sql)


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 178
    Par défaut Meilleur façon pour enregistrer une commande (sql)
    bonjour
    Si un client fait 10 achats d'articles différent.
    c'est quoi la meilleur façon enregistrer dans une table ?

    actuellement: j'enregistre chaque article dans une table 20 colonnes avec datetime unique sur chaque article pour les récupérer... donc la table peut être vite être énorme.
    ou enregistrer dans une colonne les id des articles avec serialsize = ça fait plus de manipe pour récupérer les infos mais si on modifie les infos des articles prix, titre ou autre quand on va récupérer les id des articles, ça ne va pas correspondre.

    ou faire la même chose une colonne avec serialsize avec tous les infos mais le champ va être énorme.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    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 599
    Billets dans le blog
    10
    Par défaut
    On est visiblement dans le cas le plus fréquent dans lequel les règles de gestion sont les suivantes :
    • R001a : une commande contient au moins une ligne de commande
    • R001b : une ligne de commande est contenue dans une et une seule commande
    • R002a : une ligne de commande concerne un et un seul article
    • R002b : un article est concerné par zéro (nouvel article jamais commandé) à plusieurs lignes de commandes


    La bonne démarche est de commencer par réaliser le modèle conceptuel (MCD) correspondant à ces règles de gestion, ce qui donne :
    [COMMANDE] 1, n --- (contenir) --- 1,1(R) [LIGNE_COMMANDE] 1,1 --- (concerner) --- 0,n [ARTICLE]


    De ce MCD, on obtient automatiquement un modèle tabulaire qui ressemblera à quelque chose comme ce qui suit (PK soulignées, FK suffixées #) :
    COMMANDE (CO_ident, CO_date...)
    ARTICLE (AR_ident, AR_reference, AR_libelle...)
    LIGNE_COMMANDE(CO_ident#, LC_numero, LC_quantite, AR_ident#...)

    Note : la ligne de commande est une entité-type dite "faible", identifiée relativement à la commande (symbole (R) dans les cardinalités), d'où la participation de la clef étrangère CO_ident comme composante de la clef primaire de la ligne de commande

    Il ne faut surtout pas créer une table avec plusieurs colonnes article, dans le cas d'une commande n'ayant qu'un ou deux articles, vous auriez plein de colonnes inutiles, et le jour où une commande dépasserait les 10 articles, il faudrait modifier la table...

  3. #3
    Membre confirmé
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 178
    Par défaut
    bonjour
    merci pour ta réponse..mais désolé mais je comprend rien terme trop technique pour moi... je suis qu'un amateur.
    ma table pour récupérer mes commandes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       	   $article_rec = $bdd->prepare('
    	SELECT a.idan, a.article, a.quantite, a.prix, a.photo, a.user, a.mode, a.modepaie, a.frais, a.fraisport, a.datecom, 
    	a.total, a.categ, a.souscateg, a.statut, a.datepaie, a.payer, a.date_envoi, a.raison_annul, a.numcolis,
    b.nom, b.prenom, b.rue, b.cp, b.ville, b.tel, b.adres_relai, b.id    
    FROM commande a 
    INNER JOIN 
    rc_users b ON a.user = b.user
    WHERE a.user = :user AND YEAR(datecom) = :date
    ORDER by datecom DESC '.$limit);
    	$article_rec->execute(array(
    	'user'=> $log,
    	'date'=> $dateC
    	));
    j'ai fait une ligne par article en récupérant tous et en fonction de la date.
    le client dans son historique va récupérer les bonnes infos
    car si j'enregistre les que les id, quantité prix dans une colonne et si on fait des modif niveau de l'article prix, photo, frais paypal, fraisport etc..
    ça ne récupéra pas les bonnes infos
    ce n'est pas la meilleur façon.
    si tu peut me donner un exemple de ta méthode.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    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 599
    Billets dans le blog
    10
    Par défaut
    Une base de données n'est pas un tableur, on ne répète pas les informations.

    La seule bonne façon de créer une base de données est de respecter les étapes suivantes

    1. Rédiger les règles de gestion et leur attribuer un identifiant ;
    2. Etablir le modèle conceptuel des données à partir de ces règles, de préférence en utilisant un lociel adhoc, ça limite les erreurs, facilite la maintenance et permet d'automatiser l'étape suivante ;
    3. Générer le modèle tabulaire à partir de ce modèle conceptuel. Tout logiciel de modélisation permet de réaliser cette étape en un seul (ou quelques) clic(s).


    Vous trouverez un exemple de formalisation des règles de gestion dans la réponse n°8 de ce fil de discussion

    Il existe un forum consacré à la modélisation des données il se trouve ICI

    Vous pouvez télécharger gratuitement l'excellent Looping ICI, c'est un logiciel de modélisation riche en fonctionnalités et très simple d'utilisation.

Discussions similaires

  1. Script Php pour créer une commande SQL Serveur
    Par ced255 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 21/08/2018, 12h39
  2. Meilleure façon pour protéger une application industrielle
    Par 3aychoucha dans le forum Sécurité
    Réponses: 2
    Dernier message: 10/03/2011, 08h28
  3. [CR XI] Plage de date dans une commande SQL pour une analyse de pareto
    Par Gdf.pdo dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2009, 11h35
  4. commande shell pour executer une requête sql
    Par young077 dans le forum Administration système
    Réponses: 4
    Dernier message: 10/07/2009, 02h19
  5. Meilleur langage pour gérer une base SQL
    Par carmensam dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/05/2008, 17h24

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