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 :

Composants électroniques d'un produit


Sujet :

Schéma

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Composants électroniques d'un produit
    Bonjour,

    Je me perds pour faire 1 MCD pour référencer des composants électroniques.

    J'ai fait 1 premier MCD mais j'ai des doutes car j'ai voulu regrouper tous les différents type de composants électroniques dans 1 même table au lieu de faire 1 table par type de composant. En effet, il est fort probable qu'il faille ajouter régulièrement de nouveaux types de composants, et je voulais ainsi éviter d'avoir à ajouter au fur et à mesure du besoin de nouvelles tables.

    Voici les règles :

    Il existe plusieurs types de composants électroniques.
    Exemple : résistance, condensateur, transistor, diode...

    Il existe plusieurs caractéristiques de composants.
    Exemples : pour les résistances : la résistance électrique en ohm, la tolérance en %, la tension en volt
    pour les condensateurs : la capacité électrique en farad, la tolérance, la tension
    pour les diodes : la couleur...

    Il existe plusieurs marques de composants.

    Il existe plusieurs fournisseurs de composants.

    1 type de composant peut avoir plusieurs caractéristique
    1 caractéristique peut être utile pour plusieurs composants

    1 composant est fabriqué par 1 ou plusieurs marques sous 1 référence par marque
    1 marque fabrique plusieurs composants

    1 composant est vendu par 1 ou plusieurs fournisseurs sous 1 autre référence par fournisseur
    1 fournisseur vend plusieurs composants

    Il existe plusieurs produits

    Pour fabriquer 1 produit, on utilise plusieurs composants.
    Exemple : pour fabriquer le produit A, on utilise 2 résistances à 100 k ohms, 3 résistances à 200 ohms, 1 condensateur à 10 picofarad, 1 condensateur à 20 nanofarad, 2 leds rouges et 2 leds vertes

    1 composant peut être utilisé dans plusieurs produits
    Ex : 1 led rouge est utilisée dans le produit A ainsi que dans le produit B (même si ce n'est physiquement pas la même led)

    Voici le MCD construit sous Analyse SI étant donné que c'est du Merise que je comprends le mieux (et je ne connais pas le Merise étendu non plus, juste de nom)
    Nom : MCD Electronique v2.png
Affichages : 1836
Taille : 11,2 Ko

    Ainsi que son MLD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Modèle créé le : Fri Nov 25 13:56:10 CET 2016 
    type_composants (numeo_auto_type_composant, type_composant) 
    caracteristiques_composants (numero_auto_caracteristique_composant, caracteristique_composant, unite_caracteristique_composant) 
    composants (numero_auto_composant, numero_auto_composant_type, numero_auto_composant_caracteristique, valeur_caracteristique, coefficient_unite, #numeo_auto_type_composant, #numero_auto_caracteristique_composant) 
    marques (numero_auto_marque, marque) 
    fournisseurs_electroniques (numero_auto_fournisseur_electronique, fournisseur_electronique) 
    produits (numero_auto_produit, produit) 
    composants_marques (numero_auto_marque, numero_auto_composant, reference_marque) 
    composants_fournisseurs (numero_auto_fournisseur_electronique, numero_auto_composant, reference_fournisseur) 
    composants_produits (numero_auto_produit, numero_auto_composant)
    J'en profite pour ajouter le code SQL généré (on ne sait jamais) :
    Code : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    # script créé le : Fri Nov 25 13:56:10 CET 2016 -   syntaxe MySQL ;
    
    # use  VOTRE_BASE_DE_DONNEE ;
    
    DROP TABLE IF EXISTS type_composants ;
    CREATE TABLE type_composants (numeo_auto_type_composant int AUTO_INCREMENT NOT NULL,
    type_composant TEXT,
    PRIMARY KEY (numeo_auto_type_composant) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS caracteristiques_composants ;
    CREATE TABLE caracteristiques_composants (numero_auto_caracteristique_composant int AUTO_INCREMENT NOT NULL,
    caracteristique_composant SMALLINT,
    unite_caracteristique_composant TEXT,
    PRIMARY KEY (numero_auto_caracteristique_composant) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS composants ;
    CREATE TABLE composants (numero_auto_composant int AUTO_INCREMENT NOT NULL,
    numero_auto_composant_type INT,
    numero_auto_composant_caracteristique INT,
    valeur_caracteristique TEXT,
    coefficient_unite TEXT,
    numeo_auto_type_composant INT,
    numero_auto_caracteristique_composant INT,
    PRIMARY KEY (numero_auto_composant) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS marques ;
    CREATE TABLE marques (numero_auto_marque int AUTO_INCREMENT NOT NULL,
    marque TEXT,
    PRIMARY KEY (numero_auto_marque) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS fournisseurs_electroniques ;
    CREATE TABLE fournisseurs_electroniques (numero_auto_fournisseur_electronique int AUTO_INCREMENT NOT NULL,
    fournisseur_electronique TEXT,
    PRIMARY KEY (numero_auto_fournisseur_electronique) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS produits ;
    CREATE TABLE produits (numero_auto_produit int AUTO_INCREMENT NOT NULL,
    produit TEXT,
    PRIMARY KEY (numero_auto_produit) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS composants_marques ;
    CREATE TABLE composants_marques (numero_auto_marque int AUTO_INCREMENT NOT NULL,
    numero_auto_composant INT NOT NULL,
    reference_marque TEXT,
    PRIMARY KEY (numero_auto_marque,
     numero_auto_composant) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS composants_fournisseurs ;
    CREATE TABLE composants_fournisseurs (numero_auto_fournisseur_electronique int AUTO_INCREMENT NOT NULL,
    numero_auto_composant INT NOT NULL,
    reference_fournisseur TEXT,
    PRIMARY KEY (numero_auto_fournisseur_electronique,
     numero_auto_composant) ) ENGINE=InnoDB;
    
    DROP TABLE IF EXISTS composants_produits ;
    CREATE TABLE composants_produits (numero_auto_produit int AUTO_INCREMENT NOT NULL,
    numero_auto_composant INT NOT NULL,
    PRIMARY KEY (numero_auto_produit,
     numero_auto_composant) ) ENGINE=InnoDB;
    
    ALTER TABLE composants ADD CONSTRAINT FK_composants_numeo_auto_type_composant FOREIGN KEY (numeo_auto_type_composant) REFERENCES type_composants (numeo_auto_type_composant);
    ALTER TABLE composants ADD CONSTRAINT FK_composants_numero_auto_caracteristique_composant FOREIGN KEY (numero_auto_caracteristique_composant) REFERENCES caracteristiques_composants (numero_auto_caracteristique_composant);
    ALTER TABLE composants_marques ADD CONSTRAINT FK_composants_marques_numero_auto_marque FOREIGN KEY (numero_auto_marque) REFERENCES marques (numero_auto_marque);
    ALTER TABLE composants_marques ADD CONSTRAINT FK_composants_marques_numero_auto_composant FOREIGN KEY (numero_auto_composant) REFERENCES composants (numero_auto_composant);
    ALTER TABLE composants_fournisseurs ADD CONSTRAINT FK_composants_fournisseurs_numero_auto_fournisseur_electronique FOREIGN KEY (numero_auto_fournisseur_electronique) REFERENCES fournisseurs_electroniques (numero_auto_fournisseur_electronique);
    ALTER TABLE composants_fournisseurs ADD CONSTRAINT FK_composants_fournisseurs_numero_auto_composant FOREIGN KEY (numero_auto_composant) REFERENCES composants (numero_auto_composant);
    ALTER TABLE composants_produits ADD CONSTRAINT FK_composants_produits_numero_auto_produit FOREIGN KEY (numero_auto_produit) REFERENCES produits (numero_auto_produit);
    ALTER TABLE composants_produits ADD CONSTRAINT FK_composants_produits_numero_auto_composant FOREIGN KEY (numero_auto_composant) REFERENCES composants (numero_auto_composant);
    A noter que je cherche tant que possible à éviter d'avoir 1 table Résistances avec ses propres caractéristiques dans ses champs, puis 1 table Condensateurs, puis 1 table Transistors, puis 1 table Diodes, et autant de tables que de type de composants différents.

    PS : la table Composants pouvait être 1 relation 0,n / 0,n entre Type_composants et Caractéristiques_composants, mais Merise m'interdit de faire 1 relation sur 1 relation (je crois que je m'exprime mal, j'espère qu'on me comprendra), et j'ai donc transformé cette relation en table Composants.

    Pouvez-vous vérifier s'il vous plait si ce MCD est correct ou s'il contient des erreurs ?

    Merci d'avance pour votre aide,

    Stéphane

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Vous avez pensé à citer vos règles de gestion ce qui est bien, et vous proposez un 1er modèle ce qui est bien aussi, bravo
    Une suggestion : identifiez vos règles avec un numéro, c'est plus facile pour en parler. Par exemple : "R01 : un type de composant peut avoir plusieurs caractéristiques"

    Voici un premier lot de remarques :

    -1- Vous mentionnez
    Citation Envoyé par slavergne Voir le message
    1 type de composant peut avoir plusieurs caractéristique
    1 caractéristique peut être utile pour plusieurs composants
    Donc soit les caractéristiques s'appliquent à la fois aux composants et aux types de composants, auquel cas il faut compléter les règles car il faut 4 règles pour les 2 relations, soit il faut corriger ces règles pour indiquer qui des composants ou des types de composants ont des caractéristiques. Puis bien sur, adapter le schéma en fonction

    -2- Concernant la remarque
    Citation Envoyé par slavergne Voir le message
    j'ai des doutes car j'ai voulu regrouper tous les différents type de composants électroniques dans 1 même table au lieu de faire 1 table par type de composant
    il faut identifier quelles sont les propriétés communes à tous les composants, et celles spécifiques à certains composants ou à certains types de composants, puis procéder par sous-type :
    Vous modélisez une entité-type pour ce qui est commun à tous les composants
    Vous modélisez une entité-type par famille pour ce qui concerne les propriétés spécifiques
    Voici un lien qui explique les différents choix possibles avec les avantages et inconvénients de chacun : http://merise.developpez.com/faq/?page=MLD

    -3- Cardinalités
    Attention, certaines cardinalités du MCD ne sont pas conformes aux règles
    Par exemple, vous mentionnez
    Citation Envoyé par slavergne Voir le message
    1 composant est vendu par 1 ou plusieurs fournisseurs sous 1 autre référence par fournisseur
    Mais vous avez mis une cardinalité mini de zéro qui correspond à zéro à plusieurs. Si la cardinalité mini est zéro, alors vous produisez vous même des composants, est-ce le cas ?

    -4- à ce sujet :
    Citation Envoyé par slavergne Voir le message
    Pour fabriquer 1 produit, on utilise plusieurs composants.
    Il faut donc une cardinalité mini 1 coté produit (cf. point 3) et aussi mettre un attribut quantité dans la relation produit <-> composant
    Et qui dit quantité, dit unité de mesure de cette quantité (peut être faut il 10 centimètres de fil de cuivre et 3 pièces résistances de 10 ohm par exemple=

    -5- les marques
    Ne concernent elles pas également les produits ?

    -6- et le temps dans tout ça ?
    Vous ne faites aucune référence au temps, on pourrait imaginer que la fourniture d'un composant par un fournisseur, ou que la participation d'un composant dans la composition d'un produit, varie dans le temps : démarre à telle date, s'arrête à telle autre, ou bien à telle date c'est la quantité du composant dans le produit qui change, etc...

    Bon courage pour la suite

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour escartefigue et merci pour vos remarques.

    Je vais corriger mon MCD.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Une caractéristique générale de ce type de modèle est qu'un composant peut contenir d'autres composants qui peuvent eux même contenir des composants....
    Exemple : alimentation peut contenir un cordon, un transfo et un régulateur. Le régulateur peut contenir lui même un circuit électronique avec différents composants (diode, condensateur...).
    Vous devez donc avoir une association réflexive de composant vers composant en 1:n

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour SQLPro et merci pour l'information.

    En fait, concernant mon besoin, seul la table Produit contient des Composants, et nous n'avons pas besoin de connaître les Composants qui seraient contenus dans un Composant déjà enregistré.

    Par contre, il est vrai que la table Produits pourrait être remplacée par 1 relation récursive de la table Composants.

    Bonne journée,
    Stéphane

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par slavergne Voir le message
    En fait, concernant mon besoin, seul la table Produit contient des Composants, et nous n'avons pas besoin de connaître les Composants qui seraient contenus dans un Composant déjà enregistré.
    Vous n'avez donc pas besoin de gérer de nomenclature multi-niveaux

    Citation Envoyé par slavergne Voir le message
    Par contre, il est vrai que la table Produits pourrait être remplacée par 1 relation récursive de la table Composants.
    Sauf si vous avez à la fois des produits fabriqués, dont vous connaissez les composants de 1er niveau (et pas les autres faute de nomenclature complète), mais aussi des produits achetés et revendus (si vous faites du négoce)

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En effet.

    J'aurais du préciser que les Composants sont achetés, et les Produits fabriqués.

    Et pour le moment, il n'y a pas de Produit dans 1 autre Produit (par exemple 1 produit semi fini qui serait dans 1 produit fini). Mais si ça devait arriver 1 jour, je ferai 1 association réflexive de Produits vers Produits (ce n'est pas au programme, et de toutes façons, je peux maintenir la BDD facilement).

Discussions similaires

  1. [AC-2007] Base de données pour composants électroniques
    Par Ptit_Jedi dans le forum Modélisation
    Réponses: 21
    Dernier message: 01/06/2011, 14h09
  2. Réponses: 20
    Dernier message: 20/05/2011, 13h47
  3. Réponses: 0
    Dernier message: 19/05/2011, 14h26
  4. Composants électroniques
    Par tuteur59000 dans le forum C++Builder
    Réponses: 1
    Dernier message: 29/01/2007, 17h08
  5. Réponses: 3
    Dernier message: 05/12/2006, 16h13

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