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 :

Maintenance de camions


Sujet :

Schéma

  1. #321
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut fsmrel
    Maintenant je vais lire vos nouveaux scripts
    Nous ne sommes plus synchro vous et moi hahaha
    Il faudrait reviser la table "FUEL_CONSUMPTION" car elle est inutile pour l'instant. Nous pouvons entrer seulement une fois la consommation de carburant alors qu'il faudrait enregistrer l'historique de la consommation de carburant. Il faut être capable d'entrer une nouvelle consommation à la date choisie par l'utilisateur pour avoir un suivi de la consommation du carburant.

    FUEL_CONSUMPTION
    
    Date            CamionVIN   LitersFuel  MileAgeKm   LitersPer100Km    AverageMPG
    ___________________________________________________________________________________
    2017-05-02      1234UV5643      1250      2200       autocalculé      autocalculé
    2017-06-08      1234UV5643      2079      3600       autocalculé      autocalculé
    2017-08-12      1234UV5643      850       1654       autocalculé      autocalculé
    2017-10-09      1234UV5643      2375      3200       autocalculé      autocalculé
      0  0

  2. #322
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut fsmrel
    Vous avez tellement travaillé dur, ça devient un peu gênant pour moi
    Je regarde tout ce que vous avec fait, c'est ÉNORME oufffffff

    J'essaie de comprendre exactement vous questions et je vais essayer de trouver une réponse claire pour les tables "AXLE" et "DIFFERENTIEL" pour ne pas que vous ayez à les faire et refaire sans cesse. Ces deux tables elles sont assez compliquées à expliquer car mécaniquement parlant, c'est aussi compliqué à mettre en oeuvre. Ne soyez pas surpris si vous faite l'addition des FRGAWR + 2NDGAWR + 3RDGAWR + 4THGAWR > GVWR..... C'est tout à fait normal, même votre voiture à un GVWR plus petit que le total des FRGAWR et REARGAWR. … Ce qu'il faut comprendre c'est que le GVWR appartient au véhicule et les FRGAWR, 2NDGAWR, 3RDGAWR, 4THGAWR appartiennent aux essieux.

    Donc si le total des GAWR = 10 000 kilo, il ne faut jamais dépasser le GVWR d'un véhicule. Si FRGAWR + 2NDGAWR + 3RDGAWR + 4THGAWR = 10 000 kilo et GVWR = 8000 kilo, je ne peux pas charger le véhicule plus que 8000 kilo.
      0  0

  3. #323
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par ordigil
    Vous pouvez réessayer. dbo ne veut pas lâcher prise sur vos bases de données mais je vous ai mappé avec dbo alors vous devriez avoir accès à tous
    C'est bon. J'ai rechargé DZINDZIO_TRUCKS_MANAGEMENT_TEMP.
    (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.
      1  0

  4. #324
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Exactement, si le camion n'a pas d'essieux, il n'a donc pas de différentiel… Le différentiel est une composante de l'essieu. C'est encore plus compliqué que ça car l'essieu est une composante de l'essieu hahaha.

    Le dessin résume assez bien notre histoire de différentiel et d'essieu. Donc pour les besoins de la cause, puisque le but de notre base de données n'est pas de tenir un inventaire complet des pièces d'un camion, nous oublions les demi-essieux et le "Axle Body" nous le nommerons Essieu alors "AXLE" . Et le différentiel en vue éclatée, imaginez qu'il est tout assemblé, nous l'appellerons "DIFFERENTIEL"

    Pièce jointe 418758

    Citation Envoyé par fsmrel
    (si je commence à comprendre un peu le film, les différentiels ne sont en relation avec les camions que via les essieux, c’est ça ?) :
      1  0

  5. #325
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Ok parfait. L'important c'est que vous ayez un accès complet à toutes les bases de données. Il faudrait que vous copiiez mes deux tables pour les logins "php_web_users" et "php_web_users_permission" dans vos bases de données "Temp" pour ne pas que j'aie à les recopier dans l'éventualité où vous deviez effacer "DZINDZIO_TRUCKS_MANAGEMENT" ou "DZINDZIO_TRUCKS_MANAGEMENT_TEMP" car c'est assez laborieux de remettre mon nom et mon mot de passe encrypté dans la table "php_web_users" et l'accès admin dans la table "php_web_users_permission", le site web est très strict et ne garde pas les mots de passe en clair. Si je disparais de la table "php_web_users" c'est un peu compliqué.

    Citation Envoyé par fsmrel Voir le message
    C'est bon. J'ai rechargé DZINDZIO_TRUCKS_MANAGEMENT_TEMP.
      0  0

  6. #326
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    En fait le nombre d'essieux dépend du propriétaire du camion. Il le commande son camion du fabriquant avec le nombre d'essieux qu'il veut ou il en rejoute lui-même à un camion existant. Il y a des garages spécialisés pour ça. Donc un Camion disons "Kenworth" modèle "W900L" demeure un modèle "W900L" peu importe le nombre d'essieux qu'il a. La seule différence c'est le prix, le bordereau de commande et la plaque signalétique apposée sur le cadre de la porte… Bien sur que le numéro de série indiquera le nombre d'essieux d'origine installés par le manufacturier. Mais je ne pense pas qu'il est judicieux de mentionné le Manufacturier et Modèle pour la raison que je viens de vous donner… S'adresser à la base de données avec des scripts c'est assez facile mais c'est vraiment très difficile à mettre en oeuvre sur le site WEB . Et là il semble que mon site WEB ne se préoccupe pas de vos restrictions, il en fait à sa tête hahaha. J'ai encore mis deux camions avec le même CamionNumber ce matin sans difficulté…

    Citation Envoyé par fsmrel
    Je m’avance peut-être beaucoup, mais le nombre maximum d’essieux pour un camion ne dépendrait donc que du camion, ou plutôt de son modèle et de son fabricant. Cela incite dans un 1er temps à mettre en œuvre une table FOURNISSEUR (ou MANUFACTURER, vous me direz) et une table MODELE, utilisables tant pour les composants que pour les camions.
      0  0

  7. #327
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    J'avais aussi pensé à renommer la table "DIFFERENTIEL" en table "AXLE" comme vous le suggérez. Donc, tous les "AXLE" auront un "GAWR" Le Camion ne conservera que son "GVWR" qui est une caractéristique propre au Camion et non aux "AXLE" Par contre lorsque je ferai un requête sur un Camion et que je demanderai d'énumérer ses AXLES, il faudra bien entendu que le résultat indique FRGAWR, 2NDGAWR, 3RDGAWR, etc... Est-ce que vous me saisissez ???
      0  0

  8. #328
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Si on y va de la façon que vous imaginez, sans développer les Triggers pour les restrictions, vous concevez les tables et les relations entre les tables, ce qui sera assez rapide. Et je vous direz ce que j'en pense, je crois que ce sera plus rapide que de vous dire ce que je veux exactement. Car là vous commencez à être un expert en Essieu et en Différentiel.
      0  0

  9. #329
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Et désolé si je ne répond pas rapidement à vos questions, nous avons 6 heures de différences et je suis au travail hahaha.
      0  0

  10. #330
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Pour les essieux, je regarderai plus tard, car demain je serai absent pendant un bon moment.

    Citation Envoyé par ordigil
    Nous pouvons entrer seulement une fois la consommation de carburant alors qu'il faudrait enregistrer l'historique de la consommation de carburant. Il faut être capable d'entrer une nouvelle consommation à la date choisie par l'utilisateur pour avoir un suivi de la consommation du carburant.
    Well! J’enrichis la structure de la table FUEL_CONSUMPTION en conséquence :

    CREATE TABLE FUEL_CONSUMPTION
    (
            CamionId              INT               NOT NULL
          , FuelId                INT   IDENTITY    NOT NULL
          , FuelDateReleve        DATE              NOT NULL
          , LitersFuel            float             NOT NULL
          , MileAgeKm             float             NOT NULL
          , LitersPer100Km AS ((LitersFuel/MileAgeKm)*(100)) PERSISTED NOT NULL
         , AverageMPG  AS ((282.42445)/(([LitersFuel]/[MileageKm])*(100))) PERSISTED  NOT NULL
        , CONSTRAINT FUEL_CONSUMPTION_PK PRIMARY KEY (CamionId, FuelId)
        , CONSTRAINT FUEL_CONSUMPTION_AK UNIQUE (CamionId, FuelDateReleve)
        , CONSTRAINT FUEL_CONSUMPTION_CAMION_FK FOREIGN KEY (CamionId) 
                     REFERENCES  CAMION (CamionId) ON DELETE CASCADE
        , CONSTRAINT FUEL_CONSUMPTION_CHECK_LitersFuel CHECK (LitersFuel > 0)
        , CONSTRAINT FUEL_CONSUMPTION_CHECK_MileAgeKm CHECK (MileAgeKm > 0)
    ) ;
    
    Je crée une vue FUEL_CONSUMPTION_V pour que l’utilisateur puisse consulter sans voir les attributs artificiels :

    go
    
    CREATE VIEW FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm)
    AS
        SELECT CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm
        FROM   CAMION AS x JOIN FUEL_CONSUMPTION AS y ON x.CamionId = y.CamionId 
        ;
    go
    
    Un soupçon de jeu d’essai :

     
    INSERT INTO FUEL_CONSUMPTION (CamionId, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT  CamionId, '2018-01-01', 4, 10000
        FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5747'
    ;
    INSERT INTO FUEL_CONSUMPTION (CamionId, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT CamionId, '2018-01-01', 300000, 200000
        FROM   CAMION WHERE CamionVIN = 'C1'
    ;
    
    INSERT INTO FUEL_CONSUMPTION (CamionId, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT  CamionId, '2018-06-01', 500, 15000
        FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5747'
    ;
    SELECT '' as FUEL_CONSUMPTION, * FROM FUEL_CONSUMPTION ;
    
    Dès que je pourrai, je coderai les triggers pour insert et update.

    Ce soir, beaucoup d’émotions, avec le feu chez le voisin, les pompiers bloqués dans les embouteillages, tout s’est finalement terminé sans trop de bobos, mais je flageole encore, car nos arbres et ceux du voisin sont très proches, le temps est sec et notre échange aurait pu s'arrêter net...
    (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.
      2  0

  11. #331
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Nous sommes rendu avec une base de données en Flocons ?
    Toute y passe dans cette base de données
    J'adore, j'ai vraiment beaucoup de plaisir avec vous fsmrel. J'espère que cette base de données intéressera d'autre personnes car à chaque solution que vous présentez, je reviens avec de nouveaux défies.
    Ce petit projet est devenu tellement complexe que je n'arriverais pas à faire un seul Triggers par moi-même LoL
    Ce n'est plus du tout la petite base de données que j'avais imaginée, elle est maintenant devenue une base de données professionnelle développée selon les règles de l'art.
    Pour un amateur comme moi, ça devient compliquer de vous suivre hahaha. Je vais mettre aussi "DZINDZIO_TRUCKS_MANAGEMENT_TEMP" sur le site WEB alors ne vous gênez pas pour le mettre à jour, j'ai seulement besoin de recompiler le site WEB pour mettre à jour. Mais il ne faut pas toucher à "DZINDZIO_TRUCKS_MANAGEMENT" avant que je sois certain que "DZINDZIO_TRUCKS_MANAGEMENT_TEMP" fonctionne. Sinon je dois tout refaire à partir de zéro comme la dernière fois lorsque tout a planté.
      0  0

  12. #332
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Wowww merci C'est devenue trop compliqué pour moi apporter des changements aux tables à cause de tous vos Triggers hahaha
    Je suis désolé pour l'incendie, encore chanceux que vous ne soyez pas la victime.
    Et encore une fois, il n'y a pas urgence, ce n'est pas un emploi à temps plein cette base de données Lorsque vous êtes absent, j'en profite pour essayer de tout comprendre et je fais des tests pour voir si tout est cohérent.
    Avec les scripts passés directement dans SSMS, les insertions et les updates c'est du gâteau mais pour l'interface WEB, le développement est devenu assez compliqué, disons, euhhhhhh, très très compliqué hahaha PHP n'a aucun idée de ce qu'on entre dans les formulaires, il sait seulement ce qui est dans la base de données. Donc si j'entre "Poisson Rouge" dans le formulaire au lieu d'entrer "2010-09-01" dans "CamionDateMfg" il ne voit pas la différence mais lorsqu'il qu'il essaie de l'insérer dans la base de données, il revient me dire que ça ne fonctionne pas. hahaha


    Citation Envoyé par fsmrel Voir le message
    Pour les essieux, je regarderai plus tard, car demain je serai absent pendant un bon moment.

    Well! J’enrichis la structure de la table FUEL_CONSUMPTION en conséquence :

    CREATE TABLE FUEL_CONSUMPTION
    (
            CamionId              INT               NOT NULL
          , FuelId                INT   IDENTITY    NOT NULL
          , FuelDateReleve        DATE              NOT NULL
          , LitersFuel            float             NOT NULL
          , MileAgeKm             float             NOT NULL
          , LitersPer100Km AS ((LitersFuel/MileAgeKm)*(100)) PERSISTED NOT NULL
         , AverageMPG  AS ((282.42445)/(([LitersFuel]/[MileageKm])*(100))) PERSISTED  NOT NULL
        , CONSTRAINT FUEL_CONSUMPTION_PK PRIMARY KEY (CamionId, FuelId)
        , CONSTRAINT FUEL_CONSUMPTION_AK UNIQUE (CamionId, FuelDateReleve)
        , CONSTRAINT FUEL_CONSUMPTION_CAMION_FK FOREIGN KEY (CamionId) 
                     REFERENCES  CAMION (CamionId) ON DELETE CASCADE
        , CONSTRAINT FUEL_CONSUMPTION_CHECK_LitersFuel CHECK (LitersFuel > 0)
        , CONSTRAINT FUEL_CONSUMPTION_CHECK_MileAgeKm CHECK (MileAgeKm > 0)
    ) ;
    
    Je crée une vue FUEL_CONSUMPTION_V pour que l’utilisateur puisse consulter sans voir les attributs artificiels :

    go
    
    CREATE VIEW FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm)
    AS
        SELECT CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm
        FROM   CAMION AS x JOIN FUEL_CONSUMPTION AS y ON x.CamionId = y.CamionId 
        ;
    go
    
    Un soupçon de jeu d’essai :

     
    INSERT INTO FUEL_CONSUMPTION (CamionId, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT  CamionId, '2018-01-01', 4, 10000
        FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5747'
    ;
    INSERT INTO FUEL_CONSUMPTION (CamionId, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT CamionId, '2018-01-01', 300000, 200000
        FROM   CAMION WHERE CamionVIN = 'C1'
    ;
    
    INSERT INTO FUEL_CONSUMPTION (CamionId, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT  CamionId, '2018-06-01', 500, 15000
        FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5747'
    ;
    SELECT '' as FUEL_CONSUMPTION, * FROM FUEL_CONSUMPTION ;
    
    Dès que je pourrai, je coderai les triggers pour insert et update.

    Ce soir, beaucoup d’émotions, avec le feu chez le voisin, les pompiers bloqués dans les embouteillages, tout s’est finalement terminé sans trop de bobos, mais je flageole encore, car nos arbres et ceux du voisin sont très proches, le temps est sec et notre échange aurait pu s'arrêter net...
    [/QUOTE]
      0  0

  13. #333
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    SELECT  '' AS FUEL_CONSUMPTION, x.CamionVIN, y.FuelDateReleve, y.LitersFuel, y.MileAgeKm
            ,ROUND(y.LitersPer100Km,2)LitersPer100Km, ROUND(y.AverageMPG,2)AverageMPG
    FROM    dbo.CAMION AS x INNER JOIN
            dbo.FUEL_CONSUMPTION AS y ON x.CamionId = y.CamionId
            ORDER BY CamionVIN, FuelDateReleve
    ;
    
    FUEL_CONSUMPTION    CamionVIN            FuelDateReleve  LitersFuel  MileAgeKm   LitersPer100Km  AverageMPG
                        _______________________________________________________________________________________
                        1FUJGLDR2ALAR5747       2018-01-15      976         1923        50,75           5,56
                        1FUJGLDR2ALAR5747       2018-05-04      1356        2768        48,99           5,77
                        1FUJGLDR2ALAR5747       2018-06-01      455         932         48,82           5,79
                        1FUJGLDR2ALAR5747       2018-06-15      2456,89     4256,31     57,72           4,89
                        1FUJGLDR2ALAR5747       2018-06-28      1254        2126        58,98           4,79
                        1FUJGLDR2ALAR5747       2018-09-06      3244        6879        47,16           5,99
                        C1                      2018-01-01      1798        3314        54,25           5,21
                        C2                      2018-01-09      5467        9780        55,9            5,05
                        C2                      2018-01-28      1356        2768        48,99           5,77
    



      0  0

  14. #334
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Il y a manifestement au moins un homme heureux ce soir chez DVP


    J’ai oublié les colonnes LitersPer100Km, AverageMPG dans la vue FUEL_CONSUMPTION_V.

    Voici la nouvelle mouture :

    CREATE VIEW FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm, LitersPer100Km, AverageMPG)
    AS
        SELECT CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm, LitersPer100Km, AverageMPG
        FROM   CAMION AS x JOIN FUEL_CONSUMPTION AS y ON x.CamionId = y.CamionId 
        ;
    

    Un trigger pour les inserts via la vue (attention à la division par zéro... !) :

    -------------------------------------------------------------------------------
    -- INSERT dans FUEL_CONSUMPTION à partir de FUEL_CONSUMPTION_V 
    ------------------------------------------------------------------------------
    CREATE TRIGGER FUEL_CONSUMPTION_INSERT_TR ON FUEL_CONSUMPTION_V INSTEAD OF INSERT
    AS
    INSERT INTO FUEL_CONSUMPTION
    (
              CamionId
            , FuelDateReleve
            , LitersFuel
            , MileAgeKm
    )
        SELECT  
                (SELECT CamionId FROM CAMION AS x WHERE EXISTS (SELECT '' FROM INSERTED AS y WHERE x.CamionVIN = y.CamionVIN))
              , COALESCE(FuelDateReleve, CAST('9999-12-31' as DATE))
              , COALESCE(LitersFuel, 0)
              , COALESCE(MileAgeKm, 0) -------attention à la division par zéro !
        FROM   INSERTED
    ;
    GO
    

    Un trigger pour update (en cours de mise au point)

    -------------------------------------------------------------------------------
    -- UPDATE de FUEL_CONSUMPTION à partir de FUEL_CONSUMPTION_V 
    ------------------------------------------------------------------------------
    CREATE TRIGGER FUEL_CONSUMPTION_UPDATE_TR ON FUEL_CONSUMPTION_V INSTEAD OF UPDATE
    AS
    DECLARE @CamionIdOld as int ;
    DECLARE @CamionIdNew as int ;
    DECLARE @CamionVINold as varchar(48) ;
    DECLARE @CamionVINnew as varchar(48) ;
    DECLARE @FuelDateReleveOld AS DATE ;
    DECLARE @FuelDateReleveNew AS DATE ;
    
    ------------ pour debug : ---- select '' as inserted, * from INSERTED
    ------------ pour debug : ---- select '' as deleted, * from DELETED 
    
    SET @CamionIdOld = (SELECT CamionId FROM CAMION as x WHERE exists (select '' from DELETED as y where x.CamionVIN = y.CamionVIN))
    SET @CamionIdNew = (SELECT CamionId FROM CAMION as x WHERE exists (select '' from INSERTED as y where x.CamionVIN = y.CamionVIN))
    SET @CamionVINold = (SELECT CamionVIN from DELETED) ;
    SET @CamionVINnew = (SELECT CamionVIN from INSERTED) ;
    
    SET @FuelDateReleveOld = (SELECT FuelDateReleve from DELETED) ;
    SET @FuelDateReleveNew = (SELECT FuelDateReleve from INSERTED) ;
    
    ------------ pour debug : ---- select '' as '@CamionIdOld', @CamionIdOld ;
    ------------ pour debug : ---- select '' as '@CamionIdNew', @CamionIdNew ;
    ------------ pour debug : ---- select '' as '@CamionVINold', @CamionVINold ;
    ------------ pour debug : ---- select '' as '@CamionVINnew', @CamionVINnew ;
    ------------ pour debug : ---- select '' as '@FuelDateReleveOld', @FuelDateReleveOld ;
    ------------ pour debug : ---- select '' as '@FuelDateReleveNew', @FuelDateReleveNew ;
    
    IF UPDATE(LitersFuel) OR UPDATE(MileAgeKm) 
        BEGIN
            UPDATE FUEL_CONSUMPTION
                SET LitersFuel = (SELECT LitersFuel FROM INSERTED)
                  , MileAgeKm = (SELECT MileAgeKm FROM INSERTED)
            WHERE CamionId = @CamionIdOld AND FuelDateReleve = @FuelDateReleveOld 
        ;
        END
    ;
    IF UPDATE(FuelDateReleve) 
        BEGIN
            UPDATE FUEL_CONSUMPTION
                SET FuelDateReleve  = (SELECT FuelDateReleve FROM INSERTED)
            WHERE CamionId = @CamionIdOld AND FuelDateReleve = @FuelDateReleveOld 
        ;
        END
    ;
    IF UPDATE(CamionVIN) AND NOT UPDATE(FuelDateReleve) -- si la date a changé elle aussi, le code ci-dessous ne suffit pas
        BEGIN
            UPDATE FUEL_CONSUMPTION
                SET CamionId  = @CamionIdNew
            WHERE CamionId = @CamionIdOld AND FuelDateReleve = @FuelDateReleveOld 
        ;
        END
    /*
    IF UPDATE(CamionVIN) AND  UPDATE(FuelDateReleve)  -- à essayer de faire marcher 
        BEGIN
            UPDATE FUEL_CONSUMPTION
                SET CamionId  = @CamionIdNew
            WHERE CamionId = @CamionIdOld AND FuelDateReleve = (select distinct FuelDateReleve from FUEL_CONSUMPTION WHERE  CamionId = @CamionIdOld) 
        ;
        END
    */
    GO
    

    Un bout de jeu d’essai :

    INSERT INTO FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT  CamionVIN, '2018-01-01', 4, 10000
        FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5747'
    ;
    
    INSERT INTO FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT CamionVIN, '2018-01-01', 300000, 200000
        FROM   CAMION WHERE CamionVIN = 'C1'
    ;
    INSERT INTO FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT CamionVIN, '2018-01-02', 400, 800
        FROM   CAMION WHERE CamionVIN = 'C2'
    ;
    INSERT INTO FUEL_CONSUMPTION_V (CamionVIN, FuelDateReleve, LitersFuel, MileAgeKm)
        SELECT  CamionVIN, '2018-06-01', 500, 15000
        FROM   CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5747'
    ;
    
    SELECT '' as FUEL_CONSUMPTION, * FROM FUEL_CONSUMPTION ;
    SELECT '' AS FUEL_CONSUMPTION_V, * FROM FUEL_CONSUMPTION_V
    ORDER BY CamionVIN, FuelDateReleve ;
    
    
    UPDATE FUEL_CONSUMPTION_V 
        SET  LitersFuel = 555
           , MileAgeKm = MileAgeKm + 57 
        WHERE CamionVIN = '1FUJGLDR2ALAR5747' AND FuelDateReleve =  '2018-01-01' 
    
    select * from FUEL_CONSUMPTION
    
    UPDATE FUEL_CONSUMPTION_V 
        SET  FuelDateReleve = '2018-02-05'   
           , LitersFuel = LitersFuel + 3
           , MileAgeKm = MileAgeKm + 57 
        WHERE CamionVIN = '1FUJGLDR2ALAR5747' AND FuelDateReleve =  '2018-01-01' 
    
    UPDATE FUEL_CONSUMPTION_V 
        SET -------------------CamionVIN = '1FUJGLDR2ALAR5712'  
             FuelDateReleve = '2018-10-12'   
           , LitersFuel = LitersFuel + 3
           , MileAgeKm = MileAgeKm + 100 
        WHERE CamionVIN = '1FUJGLDR2ALAR5747' AND FuelDateReleve = '2018-02-05' 
    
    UPDATE FUEL_CONSUMPTION_V 
        SET CamionVIN = '1FUJGLDR2ALAR5712'  
    -------      , FuelDateReleve = '2018-10-15'   
          , LitersFuel = LitersFuel + 3
          , MileAgeKm = MileAgeKm + 100 
        WHERE CamionVIN = '1FUJGLDR2ALAR5747' AND FuelDateReleve =  '2018-10-12' ----------'2018-02-05' 
    
    select * from FUEL_CONSUMPTION
    select * from FUEL_CONSUMPTION_V
    
    (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.
      2  0

  15. #335
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    J'avais remarqué hehehe. Comment aimez-vous ma vue avec 2 chiffres après la virgule ??? Ça fait plus joli hahaha


    Citation Envoyé par fsmrel Voir le message
    Il y a manifestement au moins un homme heureux ce soir chez DVP


    J’ai oublié les colonnes LitersPer100Km, AverageMPG dans la vue FUEL_CONSUMPTION_V.
      0  0

  16. #336
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    SELECT  '' AS FUEL_CONSUMPTION, x.CamionVIN, x.CamionNumber, y.FuelDateReleve, y.LitersFuel, y.MileAgeKm
            ,ROUND(y.LitersPer100Km,2)LitersPer100Km, ROUND(y.AverageMPG,2)AverageMPG
    FROM    dbo.CAMION AS x INNER JOIN
            dbo.FUEL_CONSUMPTION AS y ON x.CamionId = y.CamionId
            ORDER BY CamionVIN, FuelDateReleve
    ;
    C'est encore mieux avec le CamionNumber
      0  0

  17. #337
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Pour l'usager, à chaque fois qu'il est possible d'afficher le CamionNumber, il faut le mettre car, lui, il fonctionne avec le CamionNumber. Par contre on garde le CamionVIN aussi car certain camions n'ont pas de CamionNumber.
      0  0

  18. #338
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par ordigil
    Il faudrait que vous copiiez mes deux tables pour les logins "php_web_users" et "php_web_users_permission" dans vos bases de données "Temp"
    Je n’ai plus le temps, pouvez-vous le faire ? Et demain je serai absent un bon moment (ophtalmo).
    (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.
      2  0

  19. #339
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Vous ne dormez jamais ???
      0  0

  20. #340
    Membre averti Avatar de ordigil
    Homme Profil pro
    Recherche et développement sur la protection de la vie privée.
    Inscrit en
    Juillet 2018
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherche et développement sur la protection de la vie privée.
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 695
    Points : 379
    Points
    379
    Par défaut
    Bien sûr, je vais le faire dans votre "Temp".
    Bien sûr et vous pouvez prendre congé de cette base de données aussi car j'ai beaucoup de test à faire...

    Citation Envoyé par fsmrel Voir le message
    Je n’ai plus le temps, pouvez-vous le faire ? Et demain je serai absent un bon moment (ophtalmo).
      1  0

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, 15h32
  2. Création table et relations
    Par ptitdragon_eric dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2005, 13h37
  3. table de relation
    Par tanjonaravelson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/06/2005, 18h20
  4. Table de relation et sélection via jointure
    Par 73672 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 09/11/2004, 09h33
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

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