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

 MySQL Discussion :

Conseils pour architecture BDD


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut Conseils pour architecture BDD
    Bonsoir a tous et a toutes,

    Je suis nouvellement inscrit sur cette communauté et je viens vous solliciter pour vous demande votre aide.

    Je viens d'apprendre le PHP et je commence à bien me débrouiller sur MySql / PHP, mais mon niveau est plutôt limité je vous l'accorde.

    J'ai actuellement un projet en cours, et je voudrais avoir quelques conseils pour construire et utiliser correctement une BDD.

    Je suis en train de développer une nomenclature interactive et dynamique de gestion de configurations d'articles (ou de pièces) sur différents moteurs.
    C'est a dire que cet outil serait capable de lister toutes les configurations de moteurs possibles via une BDD MYsql (par ex : Moteur A, Moteur B, Moteur C) et la liste exhaustive de tous leurs composants

    Par ex :
    • la piece A va sur le moteur A et B
    • la piece B va sur le moteur A et C, etc...


    Par ex : je souhaite avoir la liste des moteurs ou se monte la piece A, la piece B etc...

    J'ai bien construit la première etape de cette application (a savoir le formulaire de création, suppression et modifications de pieces)
    Par contre je me retrouve coincé car je ne sais pas comment construire ma BDD correctement pour gérer au plus simple ce genre cas de figures.

    Quels conseils pouvez vous me donner pour construire ma BDD afin de l'utiliser correctement, mais aussi comment construire mes requêtes SQL pour avoir ce résultat ?

    Je vous remercie par avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Au vu de ce que vous avez décrit, on peux déduire la règle de gestion des données suivante :
    Une pièce peut aller sur plusieurs moteurs et un moteur est composé de une à plusieurs pièces.

    De cette règle de gestion, on dessine facilement le morceau de MCD suivant :
    piece -0,n----composer----1,n- moteur

    Et de ce MCD découlent les tables suivantes :
    te_piece_pce (pce_id, pce_reference, pce_nom...)
    te_moteur_mtr (mtr_id, mtr_reference, mtr_nom...)
    tj_pce_composer_mtr_pcm (pcm_id_piece, pcm_id_moteur...)

    Enregistrer une pièce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO te_piece_pce(pce_reference, pce_nom /*, éventuelles autres colonnes*/)
    VALUES('reference_de_la_piece', 'nom_de_la_piece'/*, éventuelles autres valeurs*/)
    Enregistrer un moteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO te_moteur_mtr(mtr_reference, mtr_nom/*, éventuelles autres colonnes*/)
    VALUES('reference_du moteur', 'nom_du moteur'/*, éventuelles autres valeurs*/)
    Nota : Vu la cardinalité 1,n dans le MCD, il faudrait en toute rigueur enregistrer simultanément le nouveau moteur et au moins une pièce entrant dans sa composition, à l'aide d'une procédure stockée, mais faisons simple, comme si un moteur pouvait être enregistré sans aucune pièce (cardinalité 0,n).

    Associer une pièce et un moteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO tj_pce_composer_mtr_pcm(pcm_id_piece, pcm_id_moteur/*, éventuelles autres colonnes*/)
    VALUES([identifiant de la pièce], [identifiant du moteur]/* , éventuelles autres valeurs*/)
    Quelles sont toutes les pièces composant le moteur de référence 'M824-D' ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.pce_id, p.pce_reference, p.pce_nom
    FROM te_piece_pce p
    INNER JOIN tj_pce_composer_mtr_pcm j ON j.pcm_id_piece = p.pce_id
    	INNER JOIN te_moteur_mtr m ON m.mtr_id = j.pcm_id_moteur
    WHERE m.mtr_reference = 'M824-D'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse ainsi que le petit guide de conception de BDD.

    En revanche j'avoue que j'ai encore un peu de mal avec les cardinalités et la jonction de tables.
    Et oui j'ai encore beaucoup de choses à apprendre...
    Je vais devoir relire plusieurs fois ce que vous m'avez écrit pour tout comprendre

    Autre question :
    Comment puis je faire facilement un formulaire qui permet d'affecter une piece sur plusieurs moteurs donnés ?
    Comment adapter ma requete SQL en conséquence, sachant que je connais pas a l'avance le nombre de moteurs sur lesquels se monte une piece.
    Est ce la meilleure solution de passer par des cases a cocher de type Checkbox ?

    Derniere question :
    Quelle est la meilleure solution à ma disposition pour afficher de facon claire sur quel moteur est monté la piece reference "111-222-333-0" ?
    Dois je obligatoirement passer par un tableau ?

    Merci par avance pour votre aide.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par double-m Voir le message
    Autre question :
    Comment puis je faire facilement un formulaire qui permet d'affecter une piece sur plusieurs moteurs donnés ?
    La partie interface graphique est indépendante de la base de données.
    On commence par concevoir et implémenter la structure de la base de données puis on passe à l'application. On peut aussi faire les deux en parallèle mais la règle à retenir est que l'application UTILISE la base de données mais ne change pas sa structure.

    En gros, le formulaire aura un système de choix de pièces (liste déroulante s'il n'y a pas beaucoup de pièces, par exemple) et idem pour les moteurs.
    Le fait de choisir une pièce puis une liste de moteurs entraînera l'insertion par le programme applicatif de toutes les lignes nécessaires dans la table associative que j'ai nommée "tj_pce_composer_mtr_pcm".

    Comment adapter ma requete SQL en conséquence, sachant que je connais pas a l'avance le nombre de moteurs sur lesquels se monte une piece.
    Il ne s'agit pas d'une requête mais de plusieurs fois la même requête d'insertion avec des valeurs différentes. En utilisant les requêtes préparées, ça gagne du temps pour l'insertion de plusieurs lignes en une passe.

    Est ce la meilleure solution de passer par des cases a cocher de type Checkbox ?
    Cases à cocher s'il n'y a pas beaucoup de moteurs, ou liste déroulante s'il y en a un peu plus, ou encore système de zone de texte interactive qui recherche le moteur par tous les moteurs en tapant le début de sa référence.

    Comme pour la BDD, commencez par bien concevoir l'application. Ce serait dommage de programmer un truc et de se rendre compte ensuite que ce n'est pas pratique et devoir programmer une solution différente.

    Derniere question :
    Quelle est la meilleure solution à ma disposition pour afficher de façon claire sur quel moteur est monté la pièce référence "111-222-333-0" ?
    Dois je obligatoirement passer par un tableau ?
    C'est une solution assez pratique et facile à mettre en oeuvre. Ça peut aussi être une liste... À vous de voir avec les utilisateurs finaux ce qui leur conviendra le mieux.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut
    Merci beaucoup pour vos réponses.

    J'ai plus qu'a mettre en pratique et je sens que je vais avoir du pain sur la planche...

    Derniere question et j'arrete de vous embetter

    Je souhaite mettre en place un systeme de suivi des modifications.

    C'est a dire que si un utilisateur modifie la quantité d'une piece sur un moteur spécifique je souhaite avoir le AVANT et le APRES (a une date donnée) pour voir rapidement ce qui a changé sur une pièce.
    Par ex :
    Derniere modification faite par Albert DUPONT le 23/04/15 :
    AVANT : Ref SMSC5417222A1 qté 2 sur moteur 104
    APRES : Ref SMSC5417222A1 qté 4 sur moteur 104

    Quelle méthode la plus simple en SQL me conseilleriez vous pour gérer ce besoin ?

    Je vous remercie par avance pour votre réponse.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Je souhaite mettre en place un systeme de suivi des modifications.

    C'est a dire que si un utilisateur modifie la quantité d'une piece sur un moteur spécifique je souhaite avoir le AVANT et le APRES (a une date donnée) pour voir rapidement ce qui a changé sur une pièce.
    Par ex :
    Derniere modification faite par Albert DUPONT le 23/04/15 :
    AVANT : Ref SMSC5417222A1 qté 2 sur moteur 104
    APRES : Ref SMSC5417222A1 qté 4 sur moteur 104
    Il faut créer une partie de schéma pour l'historique.

    Nous avions ce MCD :
    piece -0,n----composer----1,n- moteur

    Et cette table :
    tj_pce_composer_mtr_pcm (pcm_id_piece, pcm_id_moteur...)

    2 solutions :
    1) Ajouter à la table la date d'enregistrement de l'information et l'inclure dans la clé primaire.
    tj_pce_composer_mtr_pcm (pcm_id_piece, pcm_id_moteur, pcm_date_info, pcm_id_auteur_info, pcm_quantite...)
    Ainsi, la pièce 12 peut être affectée au moteur 3 avec une quantité de 4 le 04/04/2015 à 10:28:54 et avec une quantité de 5 le 13/04/2015 à 10:39:47.

    Nota : pcm_id_auteur_info fait référence à l'identifiant de l'auteur de l'information, ce qui implique qu'il faut une table des utilisateurs de l'application :
    te_utilisateur_uti (uti_id, uti_login, uti_mot_passe, uti_nom, uti_prenom...)

    Ceci correspond au MCD suivant :
    piece -0,n----composer----1,n- moteur
    date -0,n-----------|

    Mais généralement, avec ce MCD, l'entité type date est virtuelle. On peut aussi conserver le MCD d'origine avec l'association binaire et se contenter d'ajouter la propriété date en mentionnant qu'elle fait partie de la clé de l'association :
    piece -0,n----composer(date)----1,n- moteur

    Ce modèle implique, pour avoir les composants actuels du moteur, de rechercher la dernière date pour chaque pièce, ce qui complique un peu les requêtes.


    2) Ajouter une table d'historique :
    th_histo_pce_mtr_hpm (hpm_id_piece, hpm_id_moteur, hpm_date_modif, hpm_id_auteur, hpm_quantite)

    Cette fois, il faut une procédure qui, à chaque modification dans la table tj_pce_composer_mtr_pcm, enregistre les infos pré-modification dans la table d'historique puis effectue la modification.
    Pour avoir l'historique, il suffit d'interroger cette table.

    La table tj_pce_composer_mtr_pcm, quant à elle, peut avoir la même structure mais avec une clé primaire composée seulement de l'identifiant de la pièce et de celui du moteur puisque une pièce ne peut figurer qu'une seule fois pour un moteur donné dans cette table.
    tj_pce_composer_mtr_pcm (pce_id_piece, pce_id_moteur, pce_date_info, pce_id_auteur, pce_quantite)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    La partie interface graphique est indépendante de la base de données.
    On commence par concevoir et implémenter la structure de la base de données puis on passe à l'application. On peut aussi faire les deux en parallèle mais la règle à retenir est que l'application UTILISE la base de données mais ne change pas sa structure.

    En gros, le formulaire aura un système de choix de pièces (liste déroulante s'il n'y a pas beaucoup de pièces, par exemple) et idem pour les moteurs.
    Le fait de choisir une pièce puis une liste de moteurs entraînera l'insertion par le programme applicatif de toutes les lignes nécessaires dans la table associative que j'ai nommée "tj_pce_composer_mtr_pcm".


    Il ne s'agit pas d'une requête mais de plusieurs fois la même requête d'insertion avec des valeurs différentes. En utilisant les requêtes préparées, ça gagne du temps pour l'insertion de plusieurs lignes en une passe.


    Cases à cocher s'il n'y a pas beaucoup de moteurs, ou liste déroulante s'il y en a un peu plus, ou encore système de zone de texte interactive qui recherche le moteur par tous les moteurs en tapant le début de sa référence.
    bonsoir,
    Pardonnez moi je déterre ce topic car j ai mis ce projet de côté faute de temps pour développer cette application.
    Je me suis remis dessus récemment mais je n arrive pas à faire une requete préparée qui alimente la table composer avec plusieurs moteurs pour une pièce donnée.
    J ai choisi un formulaire avec des cases à cocher ou on choisit les moteurs sur lesquels on souhaite affecter les pièces.
    Je pense que je m'y prend mal car je n arrive à ajouter plusieurs liaisons dans la table composer.
    Auriez vous un exemple à me proposer pour M orienter ?
    Je vous remercie d avance

Discussions similaires

  1. Conseils pour architecture
    Par RisingDev dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 16/04/2013, 14h00
  2. Conseils pour architecture
    Par begude dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 10/06/2011, 06h04
  3. Conseil pour une BDD en reseau
    Par banban64 dans le forum Débuter
    Réponses: 1
    Dernier message: 30/03/2009, 12h24
  4. demande conseil sur architecture bdd
    Par halop dans le forum Administration
    Réponses: 2
    Dernier message: 16/07/2007, 15h52
  5. Réponses: 3
    Dernier message: 01/07/2003, 16h04

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