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

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut Maintenance de camions

    Bonjour, j'apprécierais grandement si une âme charitable pouvait m'aider. J'ai un petit problème de compréhension entités et les relations pour une partie de ma base de données...

    Mon problème est le suivant :

    J'ai des camions, des Moteurs, des Transmissions et des Différentiels.
    Pour un Camion donné, il peut avoir n'importe quel Moteur, Transmission et Différentiels. Mais il peut avoir qu'un seul Moteur, une seule Transmission et 1 ou 2 Différentiels au même moment ou aucun Moteur, aucune Transmission et aucun Différentiel. Par contre à une date précise, je peux enlever un Moteur d'un Camion et l'installer dans un autre Camion. Même chose pour la Transmission et les Différentiels.

    Donc pour simplifier disons que j'ai :

    3 Camions
    5 Moteurs
    4 Transmissions
    10 Différentiels

    -Un Camion peut avoir ou ne pas avoir un Moteur, une Transmissions et des Différentiels.
    -N'importe quel Moteur peut être installer dans n'importe quel Camion.
    -N'importe quelle Transmission peut être installer dans n'importe quel Camion.
    -N'importe quel Différentiel peut être installer dans n'importe quel Camion.
    -Il est évident qu'un Camion n'a qu'un seul Moteur, une seule Transmission et 1 ou 2 Différentiels à un instant précis.
    -Il est évident que lorsqu'un Moteur, une Transmission et 1 ou 2 Différentiels sont installés dans un Camion, ils ne peuvent pas se retrouver en même temps dans un autre Camion.
    -Il faut que j'ai une date d'installation et de désinstallation des Moteurs, des Transmissions et des Différentiels. Les Dates d'installation et de désinstallation sont différentes pour les Moteurs, les Transmissions et les Différentiels.
    -Je peux aussi décider de vendre un ou plusieurs Camions, un ou plusieurs Moteurs, une ou plusieurs Transmissions et un ou plusieurs des différentiels.
    -Et je peux aussi acheter un ou plusieurs Camions, un ou plusieurs Moteurs, une ou plusieurs Transmissions et un ou plusieurs Différentiels.

    Je n'ai rien trouvé de similaire sur internet pour m'aider à concevoir les Tables et les Relations entre les Tables. Est-ce possible de modéliser tout ça dans une base de données.

    Merci à ceux et celles qui pourront m'aider à résoudre ce problème.


    Nom : BaseDonnéesCamions.JPG
Affichages : 363
Taille : 163,2 Ko

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    Bonjour ordigil,

    Appelons « composant » un moteur ou une transmission ou un différentiel.
    Devez-vous suivre la vie d’un composant depuis qu’il est en votre possession jusqu’à sa disparition, ou bien vous intéressez-vous seulement à sa dernière situation en relation avec un camion (date installation / désinstallation) ?

    Quel est le SGBD cible ?
    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
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 918
    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 : 3 918
    Points : 8 957
    Points
    8 957
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par ordigil Voir le message
    -N'importe quel Moteur peut être installer dans n'importe quel Camion.
    -N'importe quelle Transmission peut être installer dans n'importe quel Camion.
    -N'importe quel Différentiel peut être installer dans n'importe quel Camion.
    Sans doute s'agit il d'un exercice car dans la vraie vie, ce n'est pas le cas, ne serait-ce que pour des raisons de dimensions et poids


    Citation Envoyé par ordigil Voir le message
    -Il est évident qu'un Camion n'a qu'un seul Moteur, une seule Transmission et 1 ou 2 Différentiels à un instant précis.
    Là aussi ce n'est pas le cas dans la vraie vie
    Je ne sais pas si les camions bi-moteurs existent, mais une chose est certaine, c'est que les camions ont plusieurs transmissions : des longitudinales et autant de latérales qu'il y a de demi-essieux moteurs. Par exemple pour un camion porteur double essieu arrière, il y a
    - une longi qui va de la boite de vitesse au 1er différentiel arrière
    - une longi qui va de la BV jusqu'au 2ème différentiel arrière
    - 4 latérales (2 par différentiel arrière) qui vont d'un différentiel vers chacune des roues de l'essieu

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Bonjours, c'est pour répondre à une mise en scène réelle. Lorsqu'un composant est défectueux, nous avons le choix de le réparer sans l'enlever du véhicule lorsque c'est possible. Lorsque c'est impossible, nous l'enlevons du véhicule et nous en installons un autre. Le composant défectueux, il doit rester dans l'inventaire car je peux soit le réparer moi-même, soit l'envoyer réusiner à neuf dans un garage spécialisé ou je peux simplement le vendre alors si je le vend il sortira de l'inventaire. Si il est réparé, il pourra éventuellement être installé dans un autre camion… J'utilise Microsoft SQL Server Express 2017 pour cette étude.

  5. #5
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 918
    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 : 3 918
    Points : 8 957
    Points
    8 957
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par ordigil Voir le message
    Bonjours, c'est pour répondre à une mise en scène réelle
    Donc prévoyez à minima plusieurs types de transmission pour un même véhicule (les longitudinales et les transversales sont des types différents, les transversales peuvent être également différentes entre les deux cotés du véhicule).

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    ordigil,

    Je repose ma question :

    Devez-vous suivre la vie d’un composant depuis qu’il est en votre possession jusqu’à sa disparition, ou bien vous intéressez-vous seulement à sa dernière situation en relation avec un camion (date installation / désinstallation) ?
    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
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    Quant aux camions, question analogue : pour chaque camion, voulez-vous savoir quels sont les moteurs successifs qui l’ont équipé période par période, ou bien voulez-vous seulement connaître sa situation la plus récente ? (Même chose pour les autres composants).
    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

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Merci de vous intéressez à mon problème. Alors pour les composants, oui, je veux suivre la vie d’un composant depuis qu’il est en ma possession jusqu’à sa disparition. Pour les camions, lorsqu'un composant est enlevé, j'aimerais conserver dans ma base de données quels composants ont été installés avec leur date d'installation et leur date de désinstallation. Une autre chose importante est lorsque je vend un camion, les composants qui sont présentement installés dans ce camions doivent sortir de ma base de données en même temps que le camion.

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    Bonsoir ordigil,

    A titre d'exemple, on peut déjà discuter du diagramme ci-dessous relatif aux affectations des moteurs, selon lequel :

    La clé primaire de la table CAMION est le singleton {MoteurId} où l’attribut MoteurId est de type entier. Les autres attributs de cette table sont là à titre d’exemple.

    La clé primaire de la table MOTEUR_AFFECTATION est la paire {MoteurId, MoteurAffectationId}, où l’attribut MoteurAffectationId est du type entier. Son objet est de permettre de distinguer chaque affectation (règle d’unicité).

    Le lien entre ces deux tables symbolise la règle qui veut qu’un moteur a eu de zéro à plusieurs affectations dans le temps, et la règle qui veut qu’une affectation concerne un et un seul moteur.

    L’attribut CamionId de la table MOTEUR_AFFECTATION permet de savoir à quel camion est affecté un moteur.

    L’attribut MoteurAffectationPeriode permet de connaître la période (date début, date fin) d’affectation de ce moteur à un camion.

    Le lien entre les tables CAMION et MOTEUR_AFFECTATION symbolise la règle qui veut qu’un camion a été doté de zéro à plusieurs moteurs dans le temps, et la règle qui veut qu’une affectation concerne un et un seul camion.

    La table CAMION a pour clé primaire le singleton {CamionId} où l’attribut CamionId est de type entier. Les autres attributs de cette table sont là à titre d’exemple.

    Contraintes supplémentaires :

    La paire {MoteurId, MoteurAffectationPeriode} est clé candidate (alternative) de la table MOTEUR_AFFECTATION, c'est-à-dire qu’elle garantit la contrainte selon laquelle deux affectations d’un moteur ne peuvent pas se chevaucher.

    La paire {CamionId, MoteurAffectationPeriode} est clé alternative de la table MOTEUR_AFFECTATION, c'est-à-dire qu’elle garantit la contrainte selon laquelle, pendant une période donnée, un camion ne peut avoir qu’un seul moteur.






    On pourra discuter du problème des moteurs passant de l’état affecté durant une période à l’état non affecté ensuite.

    On traitera aussi du problème que posent les SGBD ne proposant pas le type INTERVAL (date début, date fin), en effet je n’ai pas vu ce type (ou son synonyme) chez SQL Server.


    A noter qu’au stade SQL (instruction CREATE TABLE), on pourra demander à SQL de supprimer automatiquement les affectations d’un camion que l’on supprime.
    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

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    Bonjour ordigil,

    Examinons un peu plus en détail la solution précédemment proposée :


    Comme on l’a vu, avec cette solution, toute affectation d’un moteur concerne au moins un camion. Par exemple, pendant la période p11, le moteur m1 est affecté au camion c1, puis pendant la période p12 il n’est affecté à aucun camion, puis pendant la période p13 il est affecté au camion c2, puis pendant la période p14 il n’est affecté à aucun camion, puis pendant la période p15 il est affecté au camion c3.

    Les périodes p12 et p14 posent un problème : le local où se trouve alors le moteur m1 n’est pas un camion...

    (a) Le temps de ces périodes, on pourrait marquer à NULL l’attribut CamionId de la table MOTEUR_AFFECTATION, mais c’est une mauvaise idée, car la clé étrangère {CamionId} référençant la table CAMION contiendrait un attribut marqué NULL et c’est une source d’ennuis, et un des défis d’une modélisation correcte est qu’une clé étrangère ne contienne pas d’attribut marqué NULL.

    (b) On pourrait considérer le local contenant les moteurs non affectés comme un camion un peu particulier, avec par exemple la valeur de clé primaire CamionId = 0, mais les effets de bord font surface. Considérons en effet la contrainte qu’on avait établie :

    La paire {CamionId, MoteurAffectationPeriode} est clé alternative de la table MOTEUR_AFFECTATION, c'est-à-dire qu’elle garantit la contrainte selon laquelle, pendant une période donnée, un camion ne peut avoir qu’un seul moteur.

    La contrainte est contredite, car le local (considéré comme camion) doit pouvoir stocker plus d’un moteur à une date donnée. Il faudra au stade SQL aménager cette contrainte, en supprimant la clé alternative (pourtant bien pratique), et en passer par une assertion (ou plutôt d’un trigger dans le cas de votre SGBD), selon laquelle, pendant une période donnée, un camion ne peut avoir qu’un seul moteur, sauf si CamionId = 0.

    A mon sens, cette solution n’est pas très satisfaisante, les clé étrangères contenant des attributs marqués NULL et l’utilisation de camions fictifs relève du bricolage, tout cela et laid et peut poser des problèmes inattendus. On verra dans un autre message une solution alternative.

    Quelques instances :

    MOTEUR {MoteurId    ...}
            m1
            m2
            m3
    
    CAMION {CamionId    ...}
            c1
            c2
            c3
    
    MOTEUR_AFFECTATION {MoteurId    MoteurAffectationId    CamionId    MoteurAffectationPeriode}
                        m1          1                      c1          p11
                        m1          2                      0           p12
                        m1          3                      c2          p13
                        m1          4                      0           p14
                        m1          5                      c3          p15
    

    A noter que je considère que le parc de camions peut être très conséquent, le modèle doit pouvoir s’adapter à toutes situations.
    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

  11. #11
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    La solution envisagée dans mon précédent message n’est pas terrible. On peut voir ce que donne une solution alternative, selon laquelle le bonhomme NULL reste interdit de séjour et où l’on évacue la notion de prétendu camion (le local de stockage des moteurs).



    Dans ce diagramme, La nouvelle table MOTEUR_AFFECTATION_CAMION établit un lien entre la table CAMION des camions et la table MOTEUR_AFFECTATION des périodes d’affectation. La table MOTEUR_AFFECTATION_CAMION ne dit rien sur les périodes, elle dit seulement, via le lien entre CAMION et MOTEUR_AFFECTATION_CAMION, que telle affectation d’un moteur ne concerne que tel camion et qu’au fil du temps, un camion a pu avoir plusieurs affectations. Cette table dit encore, via le lien entre MOTEUR_AFFECTATION_CAMION et MOTEUR_AFFECTATION, qu’une instance de MOTEUR_AFFECTATION_CAMION ne fait référence qu’à une et une seule instance de MOTEUR_AFFECTATION et qu’une instance de MOTEUR_AFFECTATION fait facultativement référence à une instance de MOTEUR_AFFECTATION_CAMION et au plus une (on reconnaît une injection) ; ainsi, quand un moteur n’est affecté à aucun camion, le lien entre les deux tables n’est pas instancié : exit le bonhomme NULL, exit le camion fictif.


    Quelques instances :

    MOTEUR {MoteurId    ...}
            m1
            m2
            m3
    
    CAMION {CamionId    ...}
            c1
            c2
            c3
    
    MOTEUR_AFFECTATION {MoteurId    MoteurAffectationId    MoteurAffectationPeriode}
                        m1          1                      p11
                        m1          2                      p12
                        m1          3                      p13
                        m1          4                      p14
                        m1          5                      p15
    
    MOTEUR_AFFECTATION_CAMION {MoteurId    MoteurAffectationId    CamionId}
                               m1          1                      c1
                               m1          3                      c2
                               m1          5                      c3
    
    On interdit donc au bonhomme NULL de se manifester, et on se débarrasse du problème du stockage dans un camion fictif des moteurs non affectés. On saura toujours retrouver les périodes d’affectation des moteurs à un camion, au moyen d’une jointure entre les tables MOTEUR_AFFECTATION_CAMION et MOTEUR_AFFECTATION, encapsulable du reste dans une vue.

    En revanche, au vu du diagramme, on ne respecte pas la contrainte qui veut que durant une période donnée, un camion ne soit équipé que d’un seul moteur : pour que cette contrainte soit respectée, il faudra mettre en oeuvre un trigger ad-hoc au stade SQL.

    De même, puisque la suppression d’un camion doit entraîner celle des périodes d’affectation correspondantes, le stimulus de suppression se propage jusqu’à MOTEUR_AFFECTATION_CAMION mais pas jusqu’à MOTEUR_AFFECTATION : il faudra là aussi prévoir un trigger pour pouvoir supprimer les périodes concernées.

    A mon sens prévoir des triggers pour faire respecter les règles du jeu n’est pas un problème. La solution alternative est propre, alors que la 1re solution proposée ne l’est pas.


    Pour mémoire, l’historisation des données est épluchée ici : Données actives et données historisées.
    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
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Wow Vous avez travaillé dur….. hehehe

    Il y a une chose que je n'arrive pas à comprendre…. :-( Je sais que SQL Server est un peu strict sur les Data Type mais ce n'est pas une faiblesse, ça assure la fiabilité. Le Data Type du gendre DatePeriode peut apporter des problèmes.

    Donc :

    (CAMION) CamionId = Autogénéré, Unique, Primaire, Auto-Incrément ?
    (MOTEUR) MoteurId = Autogénéré, Unique, Primaire, Auto-Incrément ?
    (MOTEUR_AFFECTATION) MoteurAffectationId = Autogénéré, Unique, Secondaire, Auto-Incrément ?????
    (MOTEUR_AFFECTATION) MoteurAffectationPeriode = N'existe pas dans SQL Server :-(

    Est-ce que je pourrait mettre DateInstallation et DateDesinstallation au lieu de DateAffectationPeriode? Donc si DateDesinstallation = Null, le moteur ne peut se retrouver que dans un et un seul camion et si Non Null le moteur peut être soit dans l'inventaire, soit dans un Camion ?
    C'est vraiment dans cette partie de ma base de donnée que je suis coincé... :-(

  13. #13
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Vous avez bien compris ce que je veux.
    Alors ''Les périodes p12 et p14 posent un problème : le local où se trouve alors le moteur m1 n’est pas un camion... '' Dans ces deux périodes le local sera alors Inventaire Usagé…. Alors j'ai le choix comme local = Camion, Inventaire Neuf ou Inventaire Usagé.


    Si c'est trop compliqué ou impossible je pourrais quand même reconsidérer la gestion moteur, transmission, etc, Camions

  14. #14
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    pendant une période donnée, un camion ne peut avoir qu’un seul moteur. ou pas de moteur du tout…. Il serait alors stationné dans la cour soit pour être vendu sans moteur ou en attente d'un moteur.

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Il faut garder à l'esprit qu'un camion aura une Partie Maintenance et une Partie Réparations. Lors de la maintenance Et/OU Réparations, tout sera effectué depuis Camion. Donc si j'effectue un changement d'huile Camion_Moteur, Camion_Transmission, Camion_Différentiels, il faudra que le changement d'huile se propage au Moteur ou à la Transmission ou au/aux différentiels avec la date et le kilométrage.

  16. #16
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Et la base de données devra comporter en plus d'autres Maintenances/Réparations que les moteurs, transmission, Différentiels et Assécheur d'air. La Maintenance devra inclure graissage des camions, ajout de liquide de refroidissement radiateur, ajout gaz réfrigérant air climatisé, ajustement des freins, etc... Les Réparations devront inclure Changement de lumière, changement d'une lame de suspension, Changement d'un ballon de suspension, changement d'un roulement à bille des essieux, etc


    Maintenances et Réparations

    Nom : Diagramme maintenance réparations camions.JPG
Affichages : 283
Taille : 151,2 Ko

  17. #17
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Et le pire est à venir car je devrai concevoir une application Windows et une application iPhone pour consulter et mettre à jour cette Base de Données en passant par internet. D'où la nécessité absolue du fonctionnement parfait de ma base de données sans erreur et sans ambiguïté… La consultation et la mise à jour via un interface Web n'est pas très pratique sur un iPhone alors je concevrai une application compilée pour Windows et une application compilée pour iPhone. L'application iPhone ne nécessitera pas toutes les fonctions de l'application Windows puisque la personne en charge pourra compléter et/ou corriger à partir de l'application Windows.

  18. #18
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Ça ne pourrait pas être quelque chose qui ressemblerait à ça ??? Merci encore pour l'aide. Disons qu'un camion emprunte un moteur de l'inventaire. À la date d'emprunt (MoteurInstallationDate), le Moteur est uniquement accessible à partir de ce camion, alors il ne peut pas être dans un autre Camion ou Dans l'inventaire. Aussi longtemps qu'il n'y aurait pas de date de retour, le moteur ne pourrait pas se retrouver dans un autre camion ou dans l'inventaire.

    Nom : ordigil_camions_variante2.jpg
Affichages : 271
Taille : 62,0 Ko



    Disons un centre de location de film qui aurait seulement un exemplaire de chaque film. Il y aurait une date de sortie et une date de retour du film du centre de location. Alors lorsqu'il y a une date de sortie, le film n'est plus dans le centre de location mais chez le client. Lorsqu'il y a une date de retour, le film se retrouve à nouveau dans le centre de location et prêt à être louer au même client ou à un autre client...

  19. #19
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 543
    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 : 6 543
    Points : 23 029
    Points
    23 029
    Billets dans le blog
    16

    Par défaut

    Citation Envoyé par ordigil Voir le message
    Je sais que SQL Server est un peu strict sur les Data Type mais ce n'est pas une faiblesse, ça assure la fiabilité.
    Heureusement que les SGBD se conforment à la norme SQL ! A ceci près par exemple que SQL Server a omis de proposer le type fondamental pourtant présent dans la norme, à savoir BOOLEAN qui ne prend que les valeurs TRUE et FALSE, conformément à la logique du 1er ordre. On est obligé de pallier à coups d’astuces vaseuses, du genre oui/non, 0/1, etc.


    Citation Envoyé par ordigil Voir le message
    Le Data Type du gendre DatePeriode peut apporter des problèmes.
    Quels problèmes ? Le type INTERVAL est complètement décrit dans la norme SQL, et il est bien dommage que SQL Server n’ait pas daigné le proposer, car on est obligé de le simuler ainsi que ses opérateurs, à partir de deux attributs : date de début et date de fin. Voyez par exemple la contrainte interdisant la bilocation des télescopes.


    Citation Envoyé par ordigil Voir le message
    (CAMION) CamionId = Autogénéré, Unique, Primaire, Auto-Incrément ?
    (MOTEUR) MoteurId = Autogénéré, Unique, Primaire, Auto-Incrément ?
    (MOTEUR_AFFECTATION) MoteurAffectationId = Autogénéré, Unique, Secondaire, Auto-Incrément ?????
    (MOTEUR_AFFECTATION) MoteurAffectationPeriode = N'existe pas dans SQL Server :-(

    Est-ce que je pourrait mettre DateInstallation et DateDesinstallation au lieu de DateAffectationPeriode?
    Voici un exemple de déclaration des tables (SQL Server ne proposant pas le type INTERVAL, on doit se résoudre à utiliser des colonnes de type DATE) :

    CREATE TABLE MOTEUR 
    (
            MoteurId              INT  IDENTITY   NOT NULL
          , MoteurNumero          VARCHAR(25)     NOT NULL
          , MoteurDateAchat       DATE            NOT NULL
        , CONSTRAINT MOTEUR_PK PRIMARY KEY (MoteurId)
        , CONSTRAINT MOTEUR_AK UNIQUE (MoteurNumero)
    );
    
    CREATE TABLE MOTEUR_AFFECTATION 
    (
            MoteurId                    INT             NOT NULL
          , MoteurAffectationId         INT  IDENTITY   NOT NULL
          , MoteurInstallationDate      DATE            NOT NULL
          , MoteurDesInstallationDate   DATE            NOT NULL
        , CONSTRAINT MOTEUR_AFFECTATION_PK PRIMARY KEY (MoteurId, MoteurAffectationId)
    );
    

    Un exemple d’instanciation (j’ai supposé que l’attribut MoteurNumero est identifiant naturel). Le moteur de numéro "s01" a été installé 3 fois et réellement désinstallé 2 fois. A ce jour, il n’est pas désinstallé, parce que sa date de désinstallation est le 31/12/9999.

    INSERT INTO MOTEUR (MoteurNumero, MoteurDateAchat) VALUES ('s01', '2011-01-01') ;
    INSERT INTO MOTEUR (MoteurNumero, MoteurDateAchat) VALUES ('s02', '2012-04-01') ;
    INSERT INTO MOTEUR (MoteurNumero, MoteurDateAchat) VALUES ('s03', '2012-04-01') ;
    
    SELECT * FROM MOTEUR ;
    
    INSERT INTO MOTEUR_AFFECTATION (MoteurId, MoteurInstallationDate, MoteurDesInstallationDate) 
        SELECT MoteurId, '2015-07-20', '2016-12-08'
        FROM   MOTEUR
        WHERE  MoteurNumero = 's01'
    ;
    INSERT INTO MOTEUR_AFFECTATION (MoteurId, MoteurInstallationDate, MoteurDesInstallationDate) 
        SELECT MoteurId, '2016-12-09', '2017-04-01'
        FROM   MOTEUR
        WHERE  MoteurNumero = 's01'
    ;
    INSERT INTO MOTEUR_AFFECTATION (MoteurId, MoteurInstallationDate, MoteurDesInstallationDate) 
        SELECT MoteurId, '2017-12-07', '9999-12-31'
        FROM   MOTEUR
        WHERE  MoteurNumero = 's01'
    ;
    
    SELECT * FROM MOTEUR_AFFECTATION 
    ;
    
    Au résultat :

    MOTEUR {MoteurId    MoteurNumero    MoteurDateAchat}
            1           s01             2011-01-01
            2           s02             2012-04-01
            3           s03             2012-04-01
    
    MOTEUR_AFFECTATION {MoteurId    MoteurAffectationId    MoteurInstallationDate    MoteurDesInstallationDate}
                        1           1                      2015-07-20                2016-12-08
                        1           2                      2016-12-09                2017-04-01
                        1           3                      2017-12-07                9999-12-31
    

    Citation Envoyé par ordigil Voir le message
    si DateDesinstallation = Null
    NULL n’est pas une valeur, mais un marqueur. Cela dit, préférez utiliser une valeur pour la date de désinstallation, par exemple le 31/12/9999, comme dans l’exemple ci-dessus.


    Citation Envoyé par ordigil Voir le message
    ''Les périodes p12 et p14 posent un problème : le local où se trouve alors le moteur m1 n’est pas un camion... '' Dans ces deux périodes le local sera alors Inventaire Usagé…. Alors j'ai le choix comme local = Camion, Inventaire Neuf ou Inventaire Usagé.
    Est-ce à dire que vous souhaitez modéliser les « locaux » Inventaire Neuf et Inventaire Usagé ? C'est-à-dire savoir dans quel inventaire se situe tel moteur à telle date ?


    Citation Envoyé par ordigil Voir le message
    Si c'est trop compliqué ou impossible
    Meuh non ! Le tout est d’y aller calmement. En attendant votre réponse au sujet des inventaires, Je vais déjà voir le trigger interdisant le chevauchement des périodes.


    Citation Envoyé par ordigil Voir le message
    Il faut garder à l'esprit qu'un camion aura une Partie Maintenance et une Partie Réparations.
    Hum... Ce sujet n’a jamais été mis sur le tapis : différons, et concentrons-nous sur les affectations !
    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

  20. #20
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2018
    Messages : 513
    Points : 253
    Points
    253

    Par défaut

    Merci infiniment pour l'aide. Là, ça se rapproche de mon idée première.


    Donc ---->>>> Est-ce à dire que vous souhaitez modéliser les « locaux » Inventaire Neuf et Inventaire Usagé ? C'est-à-dire savoir dans quel inventaire se situe tel moteur à telle date ?

    À vrai dire les moteurs ne devraient pas se retrouver dans Inventaires Neuf ou Inventaire Usagé car en principe ces Inventaires sont des " Pièces " pour réparer les camions, les moteurs, les transmissions, etc. Je ne sais pas où mettre les Moteurs, Transmissions, etc, s'ils ne sont pas installés dans un Camion... Peut-être que je pourrais les mettre dans " Entrepôt " Le problème est que dans l'entrepôt, je pourrais avoir des Moteurs Neufs et des Moteurs Usagés… Mais ce n'est pas vraiment important puisque chaque Moteur aura un colonne '' hoursPurchaseEngine '' et une colonne '' hoursActualEngine ''. Donc si une Moteur à 0 dans '' hoursActualEngine '', il est évident que ce sera un Moteur neuf. Donc on pourrait y aller avec Entrepôt sans distinction entre Entrepôt Neuf et Entrepôt Usagé, nous auront seulement Entrepôt. Donc le choix de l'emplacement pour les Moteurs seront soit dans Camion, soit Entrepôt, soit Vendu. Si Vendu, on ne s'en occupe plus, il peut disparaître de ma Base de Données.

Discussions similaires

  1. Ajout dans une table et relation avec d'autres
    Par climz dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 16h32
  2. Création table et relations
    Par ptitdragon_eric dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2005, 14h37
  3. table de relation
    Par tanjonaravelson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/06/2005, 19h20
  4. Table de relation et sélection via jointure
    Par 73672 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 09/11/2004, 10h33
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 16h16

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