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 :

MCD Maintenance de matériel


Sujet :

Schéma

  1. #1
    Membre à l'essai
    MCD Maintenance de matériel
    bonjour,je voudrais modéliser ce projet
    un bureau de maintenance ou les clients deposent les machines en panne(ecran,uc,laptop,imprimante;etc).la machine déposé est affecté à maintenancier qui fait le diagnostic et le répare.le client revient le prendre .on facture pas la réparation et on gére pas de stock.le client achéte la piéce a changer.
    je voudrais connaitre le nombre de machine réparer par type et aussi le nombre de réparation effectuer en tout et pour chaque maintenancier.merci

  2. #2
    Expert éminent sénior
    Bonjour benga69,

    Votre cahier des charges est plutôt succinct et les règles de gestion restent à être écrites.
    Bon, cela dit, un début de MCD (réalisé avec l’excellent Looping) pourrait être le suivant (où TYPE_MACHINE est à remplacer par TYPE_MATERIEL pour être en cohérence avec le code SQL) :


    Je n'ai pas trouvé le moyen de supprimer l'image ci-dessus, donc j'ajoute par un autre artifice la version voulue :



    N’hésitez pas à aménager et compléter ce MCD.

    En plus, Looping vous fournit gracieusement le code SQL de création des tables :

    CREATE TABLE TYPE_MATERIEL
    (
       typeMaterielId INTEGER NOT NULL,
       typeMaterielNom VARCHAR(48) NOT NULL,
       CONSTRAINT TYPE_MATERIEL_PK PRIMARY KEY(typeMaterielId)
    );
    
    CREATE TABLE MAINTENANCIER
    (
       maintenancierId INTEGER,
       maintenancierNom VARCHAR(48) NOT NULL,
       CONSTRAINT MAINTENANCIER_PK PRIMARY KEY(maintenancierId)
    );
    
    CREATE TABLE CLIENT
    (
       clientId INTEGER NOT NULL,
       clientNom VARCHAR(48) NOT NULL,
       clientTel VARCHAR(10) NOT NULL,
       CONSTRAINT CLIENT_PK PRIMARY KEY(clientId)
    );
    
    CREATE TABLE MATERIEL
    (
       MaterielId INTEGER,
       DateEntree DATE NOT NULL,
       DateSortie DATE NOT NULL DEFAULT '9999-12-31',
       statut SMALLINT NOT NULL DEFAULT 0,
       observation VARCHAR(255) NOT NULL DEFAULT ' ',
       clientId INTEGER NOT NULL,
       maintenancierId INTEGER NOT NULL,
       typeMaterielId INTEGER NOT NULL,
       CONSTRAINT MATERIEL_PK PRIMARY KEY(MaterielId),
       CONSTRAINT MATERIEL_CLIENT_FK FOREIGN KEY(clientId) 
            REFERENCES CLIENT(clientId),
       CONSTRAINT MATERIEL_MAINTENANCIER_FK FOREIGN KEY(maintenancierId) 
            REFERENCES MAINTENANCIER(maintenancierId),
       CONSTRAINT MATERIEL_TYPE_MATERIEL_FK FOREIGN KEY(typeMaterielId) 
            REFERENCES TYPE_MATERIEL(typeMaterielId)
    );
    
    ALTER TABLE MATERIEL
        ADD CONSTRAINT MATERIEL_STATUT 
            CHECK (statut IN (0, 1)) ;
    
    Je devrais en rester là et vous laisser poursuivre. Cela dit, un bout de jeu d’essai quand même :

    INSERT INTO TYPE_MATERIEL (typeMaterielId, typeMaterielNom)
    VALUES  
        (1, 'Imprimante HP')
      , (2, 'imprimante Canon')
      , (3, 'Ecran Samsung')
      , (4, 'Processeur Intel')
    ;
    SELECT '' AS TYPE_MATERIEL, * FROM TYPE_MATERIEL ;
     
    INSERT INTO MAINTENANCIER (maintenancierId, maintenancierNom)
    VALUES
        (1, 'Raoul Volfoni')
      , (2, 'Paul Volfoni')
      , (3, 'Jean')
    ;
    SELECT '' AS MAINTENANCIER, * FROM MAINTENANCIER ;
    
    INSERT INTO CLIENT (clientId, clientNom, clientTel)
    VALUES
        (1, 'Emile Zola', '0612345678')
      , (2, 'Jean Racine','0623456789')
      , (3, 'Victor Hugo','0634567890')
    ;
    SELECT '' AS CLIENT, * FROM CLIENT ;
    
    INSERT INTO MATERIEL (MaterielId, typeMaterielId, maintenancierId, clientId, DateEntree, statut, observation)
    VALUES
        (1, 2, 2, 3, '2020-02-20', 0, 'mémoire à changer')
    ;
    
    INSERT INTO MATERIEL (MaterielId, typeMaterielId, maintenancierId, clientId, DateEntree)
    VALUES
        (2, 1, 2, 1, '2020-02-20')
    ;
    
    INSERT INTO MATERIEL (MaterielId, typeMaterielId, maintenancierId, clientId, DateEntree, DateSortie, statut, observation)
    VALUES
        (3, 2, 2, 3, '2020-02-21', '2020-02-21', 1, 'mémoire changée')
    ;
    INSERT INTO MATERIEL (MaterielId, typeMaterielId, maintenancierId, clientId, DateEntree, DateSortie, statut, observation)
    VALUES
        (4, 2, 2, 3, '2020-02-21', '2020-02-21', 1, 'mémoire changée')
    ;
    INSERT INTO MATERIEL (MaterielId, typeMaterielId, maintenancierId, clientId, DateEntree, DateSortie, statut, observation)
    VALUES
        (5, 3, 3, 2, '2020-02-21', '2020-02-21', 1, 'nettoyé')
    ;
    
    SELECT '' AS MATERIEL, * FROM MATERIEL ;
    
    Au résultat :

    TYPE_MATERIEL (typeMaterielId    typeMaterielNom)
                   1                 Imprimante HP
                   2                 imprimante Canon
                   3                 Ecran Samsung
                   4                 Processeur Intel
    
    MAINTENANCIER (maintenancierId    maintenancierNom)
                   1                  Raoul Volfoni
                   2                  Paul Volfoni
                   3                  Jean
    
    CLIENT (clientId    clientNom    clientTel)
            1           Emile Zola   0612345678
            2           Jean Racine  0623456789
            3           Victor Hugo  0634567890
    
    MATERIEL (MaterielId  DateEntree  DateSortie  statut  observation         clientId  maintenancierId  typeMaterielId)
              1           2020-02-20  9999-12-31  0       mémoire à changer   3         2                2
              2           2020-02-20  9999-12-31  0                           1         2                1
              3           2020-02-21  2020-02-21  1       mémoire changée     3         2                2
              4           2020-02-21  2020-02-21  1       mémoire changée     3         2                2
              5           2020-02-21  020-02-21   1       nettoyé             2         3                3
    

    Les réparations effectives, par type de matériel :

    SELECT y.typeMaterielNom AS TypeMateriel, COUNT(*) AS Quantite 
    FROM   MATERIEL AS x 
      JOIN TYPE_MATERIEL AS y ON x.typeMaterielId = y.typeMaterielId
    WHERE  statut = 1
    GROUP BY y.typeMaterielNom
    ; 


    Les réparations effectives, par maintenancier et type de matériel :

    SELECT y.typeMaterielNom AS TypeMateriel, COUNT(*) AS Quantite 
    FROM   MATERIEL AS x 
      JOIN TYPE_MATERIEL AS y ON x.typeMaterielId = y.typeMaterielId
      JOIN MAINTENANCIER AS z ON x.maintenancierId = z.maintenancierId 
    WHERE  statut = 1
    GROUP BY z.maintenancierNom, y.typeMaterielNom
    ;
    
    Etc., à vous de jouer.

    En passant, quel est votre SGBD ?

     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  3. #3
    Membre à l'essai
    Merci
    Merci beaucoup fsmrel.je vais utiliser Access comme bd.si tu peux m'aider aussi pour les requetes.je voudrais un formulaire de recherche pour savoir le nombre de machine reparer pour chaque client,le nombre de reparation fait par maintenancier et aussi pour chaque mois le nombre de machine deposer.encors merci j'apprend avec vous

  4. #4
    Membre confirmé
    Bonjour,

    Avant de vous lancer dans les requêtes et autres formulaires, assurez-vous bien que votre MCD correspond parfaitement à vos règles de gestion.
    Le modèle proposé par fsmrel est, comme d'habitude, très pertinent, mais le cahier des charges me semblait un peu trop vague pour être sûr qu'il répondait parfaitement à toute la problématique du système d'information.

    Bon courage !
    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

  5. #5
    Membre à l'essai
    ce MCD me convient bien.je voudrais avec access faire
    1- un formulaire de saisie qui comprent pour la table service tous les champs ,pour la table materiel(date entrée) et pour la table type_materiel(typemateriel nom).
    2-savoir pour chaque service lenombre de materiel par type réparer
    3-pour chaque maintenancier ces travaux.merci

  6. #6
    Expert éminent sénior
    Bonsoir benga69,


    Citation Envoyé par benga69 Voir le message
    ce MCD me convient bien.je voudrais avec access faire
    1- un formulaire de saisie qui comprent pour la table service tous les champs ,pour la table materiel(date entrée) et pour la table type_materiel(typemateriel nom).
    2-savoir pour chaque service lenombre de materiel par type réparer
    3-pour chaque maintenancier ces travaux.merci
    Pour les formulaires et tout ce qui n’est pas nativement SQL, malheureusement ça sort de mon domaine. Le mieux est que vous posiez vos questions dans le forum ACCESS, en y exposant les règles de gestion des données et le diagramme ACCESS.

    Par ailleurs, vous introduisez le concept de « service » : de quoi s’agit-il ? pourriez-vous être plus loquace à son sujet ?

    Pour produire le diagramme ACCESS à partir de Looping, choisir ACCESS dans la liste des SGBD qu’il propose :

    Propriétés > MLD - SQL > SGBD cible : Access



    Ceci fait, cliquer sur l’icône ACCESS :



    Looping crée alors un fichier dont le contenu est le suivant, utilisable directement avec VBA ACCESS :

    Sub Create_Tables()
    
    DoCmd.RunSQL "CREATE TABLE TYPE_MATERIEL(" & _
       "typeMaterielId INT," & _
       "typeMaterielNom VARCHAR(48) NOT NULL," & _
       "CONSTRAINT TYPE_MATERIEL_PK PRIMARY KEY(typeMaterielId)" & _
    ");"   
    
    DoCmd.RunSQL "CREATE TABLE CLIENT(" & _
       "clientId INT," & _
       "clientNom VARCHAR(48) NOT NULL," & _
       "clientTel VARCHAR(10) NOT NULL," & _
       "CONSTRAINT CLIENT_PK PRIMARY KEY(clientId)" & _
    ");"   
    
    DoCmd.RunSQL "CREATE TABLE MAINTENANCIER(" & _
       "maintenancierId INT," & _
       "maintenancierNom VARCHAR(48) NOT NULL," & _
       "CONSTRAINT MAINTENANCIER_PK PRIMARY KEY(maintenancierId)" & _
    ");"   
    
    DoCmd.RunSQL "CREATE TABLE MATERIEL(" & _
       "materielId INT," & _
       "dateEntree DATE NOT NULL," & _
       "dateSortie DATE NOT NULL DEFAULT '9999-12-31'," & _
       "statut BYTE NOT NULL DEFAULT 0," & _
       "observation VARCHAR(255) NOT NULL DEFAULT ' '," & _
       "clientId INT NOT NULL," & _
       "maintenancierId INT NOT NULL," & _
       "typeMaterielId INT NOT NULL," & _
       "CONSTRAINT MATERIEL_PK PRIMARY KEY(materielId)," & _
       "CONSTRAINT MATERIEL_CLIENT_FK FOREIGN KEY(clientId) REFERENCES CLIENT(clientId)," & _
       "CONSTRAINT MATERIEL_MAINTENANCIER_FK FOREIGN KEY(maintenancierId) REFERENCES MAINTENANCIER(maintenancierId)," & _
       "CONSTRAINT MATERIEL_TYPE_MATERIEL_FK FOREIGN KEY(typeMaterielId) REFERENCES TYPE_MATERIEL(typeMaterielId)" & _
    ");"   
     
    ALTER TABLE MATERIEL "
        ADD CONSTRAINT MATERIEL_STATUT  _
            CHECK (statut IN (0, 1)) ;
     
    End Sub
    
    Où la dernière commande (que j’ai coloriée en rouge) doit être enrichie manuellement de l’instruction "DoCmd.RunSQL", sinon ACCESS hurlera :

    DoCmd.RunSQL "ALTER TABLE MATERIEL "  & _
       " ADD CONSTRAINT MATERIEL_STATUT "  & _
          "  CHECK (statut IN (0, 1)) ;"
    

    Mode opératoire du côté ACCESS :

    Pour traduire tout cela en tables ACCESS, avec le fichier créé par Looping (appelons-le "benga69(réparations).txt") :

    Outils base de données > Visual Basic > Fichier > Importer un fichier > benga69(réparations).txt


    Pour voir, on demande ensuite l’affichage du contenu du module généré à partir du fichier importé :

    Sub Create_Tables()
    
    DoCmd.RunSQL "CREATE TABLE TYPE_MATERIEL(" & _
       "typeMaterielId INT," & _
       "typeMaterielNom VARCHAR(48) NOT NULL," & _
       "CONSTRAINT TYPE_MATERIEL_PK PRIMARY KEY(typeMaterielId)" & _
    ");"   
    
    DoCmd.RunSQL "CREATE TABLE CLIENT(" & _
       "clientId INT," & _
       "clientNom VARCHAR(48) NOT NULL," & _
       "clientTel VARCHAR(10) NOT NULL," & _
       "CONSTRAINT CLIENT_PK PRIMARY KEY(clientId)" & _
    ");"   
    
    Etc.
    
    End Sub 
    Il n’y a plus qu’à exécuter le code contenu dans ce module. Si tout se passe bien, les tables sont créées. Pour en voir les structures en ACCESS :

    Outils base de données > Relations

    =>



    Le diagramme ACCESS est sémantiquement plus pauvre que celui présenté par Looping, mais on fera avec...


     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  7. #7
    Membre confirmé
    Citation Envoyé par fsmrel Voir le message
    Ceci fait, cliquer sur l’icône ACCESS :

    Attention, un petit complément au message de fsmrel : cette icône n'existe pas par défaut dans Looping
    François, je pense que c'est toi qui dû personnaliser ta barre d'outils à accès rapide
    Il faut donc passer par le menu principal et demander "Exporter" -> "Script SQL au format TXT"
    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

  8. #8
    Expert éminent sénior
    Bonsoir Paprick,


    Citation Envoyé par Paprick Voir le message
    Attention, un petit complément au message de fsmrel : cette icône n'existe pas par défaut dans Looping
    François, je pense que c'est toi qui dû personnaliser ta barre d'outils à accès rapide
    Il faut donc passer par le menu principal et demander "Exporter" -> "Script SQL au format TXT"
    D’accord. J’ai certainement dû très tôt personnaliser la barre d’outils et, avec le temps, oublié qu’on pouvait faire ça...
    Sinon, comment accède-t-on au menu principal ? J’ai essayé des clics droit et gauche un peu partout, mais en vain…


     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  9. #9
    Membre confirmé
    Bonsoir François,

    Citation Envoyé par fsmrel Voir le message
    Sinon, comment accède-t-on au menu principal ? J’ai essayé des clics droit et gauche un peu partout, mais en vain…
    Tu cliques juste sur le rond avec le "L" de Looping en haut à gauche, et le menu se déroule.
    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

  10. #10
    Membre à l'essai
    Mercifsmrel pour ta promtitude j'ai le meme MCD.je veux juste une explication pour comment faire les formulaire comme expliqué precedement et je pourrais faire le reste

  11. #11
    Expert éminent sénior
    Citation Envoyé par Paprick Voir le message
    Tu cliques juste sur le rond avec le "L" de Looping en haut à gauche, et le menu se déroule.
    D'accord ! Mais c'était pas évident…
    J'espère m'en souvenir
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  12. #12
    Expert éminent sénior
    Bonsoir benga69,

    Citation Envoyé par benga69 Voir le message
    Merci fsmrel pour ta promtitude j'ai le meme MCD.je veux juste une explication pour comment faire les formulaire comme expliqué precedement et je pourrais faire le reste
    Comme je l’ai précisé dans le post #6, pour les formulaires et tout ce qui n’est pas nativement SQL, malheureusement ça sort de mon domaine. Il faut que vous posiez vos questions dans le forum ACCESS, en y exposant les règles de gestion des données et le diagramme ACCESS, les rois des formulaires sauront vous aider pour ce genre de choses.

    Encore désolé…

     
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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