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 :

Gestion de stock - Assemblage de pièces


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 23
    Points
    23
    Par défaut Gestion de stock - Assemblage de pièces
    Bonjour,

    Je dois modifier la gestion de stock actuellement utilisé dans mon entreprise.
    (c# + sql server)

    En simplifié, elle se compose actuellement de :
    - une table rubrique avec un nom (rubnom) et une clé primaire autoincrémenté (rubidx)
    ex : rubnom : Mémoire

    - une table pièces avec pienom et pieidx autoincrementé
    ex : pienom : Mémoire PC 133 ECC 512Mo, pieidx : 175

    - une table piecestock avec piestoidx, S/N, marque, libelle...
    ex : id : 9985, marque : samsung, libelle : barette monocanal, puces 16k ...



    Voici ce que je dois pouvoir faire après mes modifs :
    Certaines pièces seront des assemblages d'autre pièces. Leur quantité en stock sera calculer à partir du stock des pièces la composant.
    ex : Lot de 2 barettes de RAM - PC 133 ECC 512Mo, sera composé de 2 barette vu au dessus (id:175 min:2, max:2)
    ex : Kit 2nd processeur Pentium 4c, Sera composé de : Un proc parmi la rubrique des P4C, un radiateur pour P4 (la piece id : 254). chaque élément en quantité 1 (min:1, max:1)

    les règles :
    - Une pièce pourra être une pièce simple ou composé (un champ isDynamique fera l'affaire)
    - Une pièce composé pourra être nommé 'assemblage'. l'assemblage contiendra des composants (nom de la pièce qui fait parti de l'assemblage).
    - Un assemblage aura un nom générique et un ID, l'assemblage utilisera donc le champ pienom et pieidx comme champs principaux
    - un assemblage contiendra 1 à n composants
    - un composant pourra être une pièce (ex pieidx : 175)
    - un composant pourra être une rubrique (ex rubidx : 25)
    - un composant pourra être une parmis plusieurs pièce (ex pieidx : 175, 176,177)
    - un composant pourra être une parmis plusieurs rubrique (ex rubidx : 25,26 et 27)
    - un composant sera présent un nombre X de fois dans l'assemblage. avec quantité MIN et MAX (exemple : Le kit ram 1 Go 133, se compose du composant barrette de ram 512 PC133 , min : 2, max: 2)

    On doit pouvoir faire des assemblages complexe :
    Kit upgrade XEON composé de :
    processeur xeon depuis la rubidx 55, min 2, max 2
    1 radiateur xeon depuis la pieidx 260 min 1, max 1
    2 à 4 barettes de RAM identique depuis la rubidx 160 "ram pour xeon", min 2, max 4
    0 à 1 carte réseau Gigabit PCI-X (pieidx 540), min 0, max 1

    Avec toute les possibilités (10 proc different, 5 taille de ram differentes...) on obtient des centaines de possibilités de combinaison que l'on peut généré. Certaine seront courante et je veux pouvoir leurs données un nom, description, un champ prix (ex : kit upgrade Xeon 3Ghz, 4x2Ghz, réseau Giga) mais je ne veux pas que toute les possibilité soient enregistré dans une table (elle serait énorme)


    Bon je ne sais pas si quelqu'un aura lu jusqu'au bout (si c'est le cas il aura le droit à un cookie !) Je suis dessus depuis vendredi soir et franchement mes cours de MCD me paraissent loinnnnn


    Merci

    Cyrille

  2. #2
    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
    Commencez par écrire des règles de gestion des données claires puis tirez-en un MCD que vous réaliserez de préférence avec un logiciel de modélisation.
    Il en existe des gratuits comme Open Modelsphere ou JMerise.

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

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


    Citation Envoyé par ograweb Voir le message
    une table rubrique avec un nom (rubnom) et une clé primaire autoincrémenté (rubidx)
    ex : rubnom : Mémoire
    Avez-vous d’autres exemples ? Le terme « rubrique » est-il synonyme de type de matériel ? Type de pièce ?

    Au travers des exemples que vous donnez, on subodore que « mémoire », « radiateur », « Pentium » (ou « Pentium 4C ») sont des rubriques. Pourriez-vous fournir une liste de libellés exacts ? Ça aiderait à mieux interpréter votre problème.


    Citation Envoyé par ograweb Voir le message
    une table pièces avec pienom et pieidx autoincrementé
    ex : pienom : Mémoire PC 133 ECC 512Mo, pieidx : 175
    Le mot « Mémoire » apparaît une 2e fois : du point de vue de la modélisation on peut le suspecter d’être redondant et remplaçable par une référence à la rubrique « Mémoire » mentionnée ci-dessus.

    Par extension, chaque pièce devrait faire référence à une rubrique.


    Citation Envoyé par ograweb Voir le message
    une table piecestock avec piestoidx, S/N, marque, libelle...
    ex : id : 9985, marque : samsung, libelle : barette monocanal, puces 16k ...
    Que signifie « S/N » ?

    Quelle différence en termes de structure y a-t-il entre une pièce (table PIECE) et une pièce en stock (table PIECESTOCK) ? Pourquoi existe-t-il deux tables ?

    La table PIECESTOCK devrait faire référence à une table MARQUE, comme dans le cas de la discussion avec drakuncorp (cf. ce schéma parmi un grand nombre d’autres de cette discussion).

    En attendant, une ébauche de base de départ possible sous forme de MLD avec MySQL Workbench (voyez chez JogodePau pour voir à quoi ressemble l'outil) :

    Noter la factorisation des rubriques et des pièces. Ça fait bizarre, mais c’est la conséquence de votre volonté de panacher ces types de données au stade de l'assemblage : un élément est soit une rubrique soit une pièce.



    Dans COMPOSITION (qu'on peut renommer en ASSEMBLAGE), ComposantId et ComposéId constituent la clé primaire {ComposantId, ComposéId} de la table.


    {ComposantId} est clé étrangère par rapport à la clé {ElementId} de la table ELEMENT, même principe pour {ComposéId}.

    Un losange rouge est aussi synonyme de clé étrangère (tables RUBRIQUE et PIECE par référence à la table ELEMENT).


    Cela dit, il y a d'autres MLD (donc MCD) possibles et en fonction des précisions que vous apportez quant aux règles de gestion des données, celui-ci partira peut-être à la poubelle.
    (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.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    J'ai avancer un peu sur ce projet.

    http://imageshack.us/g/690/gestionstock.jpg/

    voici un pseudo MLD, et 3 Forms très simplifié pour vous montrer le rendu
    J'ai perdu l'habitude de faire des MCD, et même de les lire. Donc je n'ai ni le logiciel, ni les souvenir du sens des flèches.. etc.. Habituellement je réfléchi directement au niveau des tables, donc un MLD est très proche

    Form 1 : (déjà pleinement fonctionnel)
    Liste des pièces filtré par catégorie.
    Dans le schéma, je n'ai pas représenté les propriété permettant de faire un arbre de catégorie mais dans mon appli cela fonctionne

    Form2 :
    Propriété d'une pièce appelé "produit 14"
    La aussi j'ai simplifié avec seulement le nom de la pièce, le boolean ''isAssemblage" et la liste des éléments du produit
    Un element est une pièce parmis 1 à n rubrique ou 1 à n piece

    Form3 :
    La piece "produit14" est donc défini par ces composant. Il peut donc y avoir une multitude de variante de ce "produit14" en fonction des pieces choisi pour chaque éléments. certaines variantes sont importante et d'autre non. Chaque variante importante est appelé assemblage et enregistré grâce à la form 3. Sur le 'MLD", j'ai représenté l'assemblage sans le lier au reste
    les champs du tableaux de la form3 sont des "dropdownlist" qui permettend de choisir les pieces et les quantité, en fonction de ce qui à été defini dans la form 2.


    J’espère que c'est plus clair ainsi. Je pense que la solution dans l'image est bonne. N'hésitez pas à me dire si je me plante !

    Cyrille

  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 001
    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 001
    Points : 30 903
    Points
    30 903
    Billets dans le blog
    16
    Par défaut
    Bonjour Cyrille,


    Votre MLD fonctionne à l’envers. Par exemple, votre table ELEMENT est dotée d’un attribut PieceId qui fait manifestement référence à l’attribut PieceId de la table PIECE, les clés ne sont pas précisées, etc. Je pense que vous n’avez pas bien interprété le MLD que je vous ai proposé, lequel donne en SQL :

    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
    25
    26
    27
    28
    29
    CREATE TABLE ELEMENT (
            ElementId          CHAR(8)          NOT NULL,
        CONSTRAINT ELEMENT_PK PRIMARY KEY (ElementId)        
    ) ;
    CREATE TABLE RUBRIQUE (
            RubriqueId         CHAR(8)          NOT NULL,
            RubriqueLibelle    VARCHAR(64)      NOT NULL,
            ElementId          CHAR(8)          NOT NULL,
        CONSTRAINT RUBRIQUE_PK PRIMARY KEY (RubriqueId)        
      , CONSTRAINT RUBRIQUE_AK UNIQUE (ElementId)   
      , CONSTRAINT RUBRIQUE_ELEM_FK FOREIGN KEY (ElementId) REFERENCES ELEMENT (ElementId)   
    ) ;
    CREATE TABLE PIECE (
            PieceId            CHAR(8)          NOT NULL,
            PieceLibelle       VARCHAR(64)      NOT NULL,
            ElementId          CHAR(8)          NOT NULL,
        CONSTRAINT PIECE_PK PRIMARY KEY (PieceId)        
      , CONSTRAINT PIECE_AK UNIQUE (ElementId)   
      , CONSTRAINT PIECE_ELEM_FK FOREIGN KEY (ElementId) REFERENCES ELEMENT (ElementId)   
    ) ;
    CREATE TABLE COMPOSITION (
            ComposantId            CHAR(8)          NOT NULL,
            ComposéId              CHAR(8)          NOT NULL,
            QteMin                 INT              NOT NULL,
            QteMax                 INT              NOT NULL,
        CONSTRAINT COMPOSITION_PK PRIMARY KEY (ComposantId, ComposéId)        
      , CONSTRAINT COMPOSITION_ELEM_FK1 FOREIGN KEY (ComposantId) REFERENCES ELEMENT (ElementId)   
      , CONSTRAINT COMPOSITION_ELEM_FK2 FOREIGN KEY (ComposéId) REFERENCES ELEMENT (ElementId)   
    ) ;

    Un jeu d’essai :

    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
    INSERT INTO ELEMENT (ElementId) VALUES ('E1') ;
    INSERT INTO ELEMENT (ElementId) VALUES ('E2') ;
    INSERT INTO ELEMENT (ElementId) VALUES ('E3') ;
    INSERT INTO ELEMENT (ElementId) VALUES ('E4') ;
    INSERT INTO ELEMENT (ElementId) VALUES ('E5') ;
     
    SELECT '' AS 'ELEMENT', * FROM ELEMENT ;
     
    INSERT INTO RUBRIQUE (RubriqueId, RubriqueLibelle, ElementId) VALUES ('R1', 'Mémoire', 'E1') ;
    INSERT INTO RUBRIQUE (RubriqueId, RubriqueLibelle, ElementId) VALUES ('R2', '¨Pentium 4C truc', 'E5') ;
     
    SELECT '' AS 'RUBRIQUE', * FROM RUBRIQUE ;
     
    INSERT INTO PIECE (PieceId, PieceLibelle, ElementId) VALUES ('175', 'Mémoire PC 133 ECC 512Mo', 'E2') ;
    INSERT INTO PIECE (PieceId, PieceLibelle, ElementId) VALUES ('200', 'Lot', 'E3') ;
    INSERT INTO PIECE (PieceId, PieceLibelle, ElementId) VALUES ('254', 'un radiateur pour P4', 'E4') ;
    INSERT INTO PIECE (PieceId, PieceLibelle, ElementId) VALUES ('300', 'Kit 2nd processeur Pentium 4c', 'E5') ;
     
    SELECT '' AS 'PIECE', * FROM PIECE ;
     
    INSERT INTO COMPOSITION (ComposantId, ComposéId, QteMin, QteMax) VALUES ('E2', 'E3', 2 , 2) ;
    INSERT INTO COMPOSITION (ComposantId, ComposéId, QteMin, QteMax) VALUES ('E4', 'E5', 1 , 1) ;
     
    SELECT '' AS 'COMPOSITION', * FROM COMPOSITION ;


    Citation Envoyé par ograweb Voir le message
    Une pièce pourra être une pièce simple ou composé (un champ isDynamique fera l'affaire)
    L’attribut isDynamique ne relève pas de la modélisation mais du bricolage. En théorie, une pièce est simple si elle n’apparaît pas en tant que composant dans la table COMPOSITION.


    Citation Envoyé par ograweb Voir le message
    Liste des pièces filtré par catégorie.
    L’attribut Catégorie arrive comme un cheveu sur la soupe. Merci de le décrire et d’en préciser le rôle.


    Dans votre « MLD », la table ELEMENT comporte un tableau (array) : ElementId (1à10) : comme eut dit Pascal (in "Les tontons flingueurs"), « c’est quoi cette embrouille ? » N'oubliez pas qu'on modélise non pas horizontalement, mais verticalement.


    Bref le mystère s’épaissit.
    (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.

Discussions similaires

  1. [Toutes versions] Assemblage de deux requêtes gestion de stock
    Par HenryKretz dans le forum Access
    Réponses: 7
    Dernier message: 09/07/2015, 16h39
  2. Gestion de stock de pièces
    Par monnotgab dans le forum Modélisation
    Réponses: 1
    Dernier message: 18/01/2013, 15h51
  3. Gestion de stock magasin de pièces
    Par moilou2 dans le forum Modélisation
    Réponses: 3
    Dernier message: 02/01/2008, 23h53
  4. Analyses du progiciel de gestion de stock COSWIN CS 5.2
    Par africanroseonlyone dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 13/10/2005, 15h01
  5. gestion des stocks
    Par gekondo dans le forum Access
    Réponses: 1
    Dernier message: 30/09/2005, 11h41

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