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. #981
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    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 142
    Points : 38 924
    Points
    38 924
    Billets dans le blog
    9
    Par défaut
    Un travail énoooorme en effet

    Y a plus qu'à lui envoyer un enoooorme camion par la poste en remerciement, un modèle camping car capitonné histoire de pouvoir faire le tour du Canada avec
      2  0

  2. #982
    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
    Bonjour escartefigue, il y a un travail énorme dans cette base de données, fsmrel a touché à presque toutes les facettes de SQL Server. Je suis vraiment impressionné, on pense à quelque chose et hop, c'est utilisé dans la base de données et en plus tellement bien documenté. À l'origine je ne pensais pas que l'on pouvait dédier autant de travail au moteur de la base de données. À l'origine, je dédiais 85% de la charge de travail à l'intérieur de mon interface graphique, ça fonctionnait pour des petites bases de données mais côté traffic réseau et sécurité, c'était une autre histoire.... Jusqu'à maintenant fsmrel dédie 100% de la charge de travail à SQL Server, je ne pensais pas que l'on pouvait aller aussi loin dans la programmation SQL. Dommage que je n'ai pas connu fsmrel il y a 20 ans, j'aurais peut-être fait carrière dans les bases de données. Dans le temps on nous enseignait la méthode Merise mais on nous apprenait à géré 75% à 85% de la base de données avec le Visual Basic ou le C#. J'imagine le nombre de bases de données à l'intérieur des entreprises qui devraient tout simplement être refaites à partir de Zéro. Encore la semaine dernière une grosse entreprise ici a eu son système informatique planté. C'est devenu un rituel pour la majorité des petites et moyennes entreprises de voir leur parc informatique planté car leurs administrateurs en informatique ne se recyclent pas, ils refusent tout changement, ils savent tout et les autres ne savent rien... Dommage que je ne suis plus dans le domaine informatique et surtout plus jeune pour étudier. Lorsque je concevais des systèmes informatiques pour les petites entreprises dans le temps, j'étais tellement avant gardiste que je déclarais que nous étions au minimum 25 en arrière sur la technologie et là je me faisait garrocher des tomates.. Et je suis persuadé que nous sommes 25 ans en arrière encore de nos jours. Il est quasi impossible de changer la mentalité des entreprises, si ça fonctionne, on reste ça comme ça. Point... Il y a tellement de traffic sur les réseaux d'entreprises à cause des bases de données déficientes et du matériel non optimisé.

    Citation Envoyé par escartefigue Voir le message
    Un travail énoooorme en effet

    Y a plus qu'à lui envoyer un enoooorme camion par la poste en remerciement, un modèle camping car capitonné histoire de pouvoir faire le tour du Canada avec
      1  0

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


    Citation Envoyé par ordigil
    Pensez-vous que l'on devrait ajouter une colonne du genre 'CategorieContact' dans la Table Contact ??? Pour différencier les Clients, les Shops, les Headquarters, les Manufacturiers, les Fournisseurs, etc.
    Une telle colonne n’est pas essentielle, mais je suppose qu’elle vous facilitera la vie : je vais donc m’employer à la mettre en place, mais il faudra que je voie les impacts : par exemple, si cette colonne prend la valeur 'manufacturier' dans la table CONTACT, la valeur prise par la clé primaire ContactId devra être une valeur de la clé primaire de la table MANUFACTURIER, mais surtout pas des tables HEADQUARTERS, SHOP, etc. ! Autrement dit : triggers en vue ! Je reprends mes palmes, mon masque et mon tuba et plonge (si je me perds, le ferry du Capitaine viendra me repêcher ;-) )
    (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

  4. #984
    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
    On peut attendre un peu. En effet c'est pour me faciliter la tâche de la programmation de l'interface web. Mais ne changez rien pour l'instant, je veux que vous ayez accès au site web en premier pour voir comment je pourrait faire différemment... Je veux que les choix dans mes combobox se remplissent automatiquement mais c'est assez difficile à mettre en oeuvre pour l'instant. Peut-être en ajoutant une autre vue ça règlerait le problème plus efficacement.

    Citation Envoyé par fsmrel Voir le message
    Merci les enfants !


    Une telle colonne n’est pas essentielle, mais je suppose qu’elle vous facilitera la vie : je vais donc m’employer à la mettre en place, mais il faudra que je voie les impacts : par exemple, si cette colonne prend la valeur 'manufacturier' dans la table CONTACT, la valeur prise par la clé primaire ContactId devra être une valeur de la clé primaire de la table MANUFACTURIER, mais surtout pas des tables HEADQUARTERS, SHOP, etc. ! Autrement dit : triggers en vue ! Je reprends mes palmes, mon masque et mon tuba et plonge (si je me perds, le ferry du Capitaine viendra me repêcher ;-) )
      0  0

  5. #985
    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, PHP refuse d'être copain copain avec vous hahaha. Ça devrait fonctionner maintenant. Pour l'instant plusieurs choses ne sont pas fonctionnelles sur le site web mais essayez quand même de changer les valeurs des colonnes et vous comprendrez mon petit problème. Vous verrez tous les message d'erreurs. Lorsqu'on se sera mis d'accord, je commencerai à programmer les combobox... Mais pour l'instant c'est préférable que vous essayer sans combobox...
      0  0

  6. #986
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    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 142
    Points : 38 924
    Points
    38 924
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par ordigil Voir le message
    C'est devenu un rituel pour la majorité des petites et moyennes entreprises de voir leur parc informatique planté car leurs administrateurs en informatique ne se recyclent pas, ils refusent tout changement, ils savent tout et les autres ne savent rien...
    Ce n'est malheureusement pas l'apanage des PME, j'interviens essentiellement chez des grands voire très grands comptes chez qui on rencontre exactement les mêmes travers.
    Le manque de formation est en cause mais aussi les délais d'étude riquiquis qui pénalisent la phase de conception et font bondir les coûts de maintenance aussi vite que l'insatisfaction des clients


    Citation Envoyé par ordigil Voir le message
    Et je suis persuadé que nous sommes 25 ans en arrière encore de nos jours. Il est quasi impossible de changer la mentalité des entreprises, si ça fonctionne, on reste ça comme ça. Point... Il y a tellement de traffic sur les réseaux d'entreprises à cause des bases de données déficientes et du matériel non optimisé.
    Les décideurs savent trouver des budgets pour faire de beaux écrans et de l'informatique mobile : on paye des ergonomes, des designer et toute une armée de mexicains pour faire du beau, par contre, pour modéliser une BDD dans les règles de l'art et la faire fonctionner comme il faut c'est beaucoup plus compliqué d'aligner les sous, comme ça ne se voit pas, ça n'est pas vendeur et donc tout le monde s'en cogne ou à peu près
      2  0

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


    Je réponds tardivement, mais hier, mon écran est tombé malade pendant que je manipulais les différentiels sur le WEB...
    Aujourd’hui il a l’air d’avoir recouvré un minimum de santé, mais il faudra que je fasse l’acquisition d’un nouvel écran...


    Citation Envoyé par ordigil
    essayez quand même de changer les valeurs des colonnes et vous comprendrez mon petit problème.
    Pouvez-vous être plus précis ? Quelles opérations (insert, update) posent problème ? sur quelles vues ? S’agit-il de messages spécifiques de SQL Server ? De messages que j’ai codés ?

    Par exemple, j’ai tenté de créer un headquarters en double, 'Daimler', d’où le message d’erreur suivant :



    Souhaitez-vous que le message affiché se résume à ma partie ?

    Par ailleurs, je rappelle que tous les triggers ne sont pas encore en place, notamment ceux qui concernent l’instruction UPDATE (voyez ici), d’où insultes de la part de SQL Server, du genre :


    Citation Envoyé par SQL Server
    La vue ou la fonction 'xyz' ne peut pas être mise à jour car la modification porte sur plusieurs tables de base.
    Par ailleurs, bien que je fasse particulièrement attention, je n’ai peut-être pas mis à niveau tous les triggers de votre côté.
    (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

  8. #988
    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
    Bonjour fsmrel :-):-):-)

    Pour l'instant avoir les messages d'erreurs complets ça m'aide à débugger le site web. Je pourrais configurer PHP pour qu'il me donne beaucoup plus de détails sur les erreurs mais j'exposerais toute ma configuration et tout et tout et tout sur internet alors je lui demande seulement d'afficher le minimum. Si je lui demandais d'afficher plus, je devrais mettre le site web seulement en réseau local pour le développer mais je veux que vous puissiez accéder au site web pendant que je le conçois. Donc pour les messages d'erreurs, nous pourrons les mettre plus "Friendly" pour l'utilisateur final lorsque tout fonctionnera parfaitement…

    Pour l'instant je ne sais pas quels sont les triggers à jour et ceux qui ne le sont pas alors difficile pour moi de faire les tests de triggers sur le site WEB. Prenez en considération que j'utilise "DZINDZIO_TRUCKS_MANAGEMENT_GILLES" pour le site web alors lorsque vous faites des changements dans "DZINDZIO_TRUCKS_MANAGEMENT_TEMP" vous me le dites et je mettrai à jour "DZINDZIO_TRUCKS_MANAGEMENT_GILLES" pour vérifier les mise à jour de vos triggers.

    On continue comme on le fait présentement, vous faites un travail énorme et malheureusement je ne peux plus aider à grand chose dans la base de données car ce serait contreproductif. On continue comme vous imaginez la base de données en gardant à l'esprit que nous sommes dans un environnement de garages de fond de cour. Vous comprenez parfaitement la relation entre les divers composants majeurs des camions alors je n'ai plus un mot à dire sur la base de données L'important est le résultat final adapté pour des individus qui n'ont aucune idée du fonctionnement d'un ordinateur à l'exception du bouton ON/OFF… La plus grosse catastrophe à été l'arrivé des "Tabettes" qui fonctionnent comme des demi-ordinateurs et qui sont lents comme des tortues. Ça tué le marché des ordinateurs portables "Laptop" qui sont appelé à disparaître. Je ne comprend pas les gens qui achètent des Tablettes, on a aujourd'hui des Laptop aussi petits que les Tablettes et 10 fois plus performants pour le même prix. Mais bon, les gens ne comprennent pas qu'ils se font baiser.

    Citation Envoyé par fsmrel Voir le message
    Bonjour Ordigil,


    Je réponds tardivement, mais hier, mon écran est tombé malade pendant que je manipulais les différentiels sur le WEB...
    Aujourd’hui il a l’air d’avoir recouvré un minimum de santé, mais il faudra que je fasse l’acquisition d’un nouvel écran...




    Pouvez-vous être plus précis ? Quelles opérations (insert, update) posent problème ? sur quelles vues ? S’agit-il de messages spécifiques de SQL Server ? De messages que j’ai codés ?

    Par exemple, j’ai tenté de créer un headquarters en double, 'Daimler', d’où le message d’erreur suivant :



    Souhaitez-vous que le message affiché se résume à ma partie ?

    Par ailleurs, je rappelle que tous les triggers ne sont pas encore en place, notamment ceux qui concernent l’instruction UPDATE (voyez ici), d’où insultes de la part de SQL Server, du genre :




    Par ailleurs, bien que je fasse particulièrement attention, je n’ai peut-être pas mis à niveau tous les triggers de votre côté.
      1  0

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

    Citation Envoyé par ordigil
    Pour l'instant je ne sais pas quels sont les triggers à jour et ceux qui ne le sont pas
    L’état des triggers (avec date de mise à niveau) reste encore celui que j’ai fourni ici.

    Citation Envoyé par ordigil
    lorsque vous faites des changements dans "DZINDZIO_TRUCKS_MANAGEMENT_TEMP" vous me le dites
    Bien sûr.
    (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

  10. #990
    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
    Ah vous mettez la liste toujours à jour

    Citation Envoyé par fsmrel Voir le message
    Bonjour Ordigil,


    L’état des triggers (avec date de mise à niveau) reste encore celui que j’ai fourni ici.



    Bien sûr.
      0  0

  11. #991
    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
    Bonjour fsmrel,
    Désolé si je semble absent dans notre forum mais vous m'avez donné de la lecture alors je lis hahaha

    Je n'ai pas encore trouvé la solution idéale pour le site WEB et les combobox... Si je conçois une liste en hard, si l'utilisateur final ajoute disant un Manufacturier ou un Modèle, ils n'apparaitront pas dans les liste de sélection des combobox. Par contre si je laisse SQL Server remplir la liste de choix automatiquement, l'utilisateur se retrouvera avec des choix qui n'auront aucun rapport puisque nous avons tout mis dans la Table CONTACT... D'où ma dernière question si on devrait ajouter une colonne supplémentaire dans la Table CONTACT. C'est une question car je ne sais pas si vous avez autre chose à proposer pour compenser cette lacune.... Peut-être que moi je ne vois pas la bonne façon de procéder..
      0  0

  12. #992
    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
    Je n'arriverai pas à faire ça tout seul. Il faudrait que j'écrive tout sur les murs ou que j'aie un écran géant pour tout voir en même temps

    
    CREATE PROCEDURE BILOCATION_CONTROLE_PROC
    (
        @ComposantPrevuId AS INT                           -- identifiant du composant à installer       
      , @LocalisationPrevueId AS INT                       -- identifiant du camion ou du local objet de l'installation
      , @InstallPrevue AS DATE                             -- date prévue d'installation (9999-12-31 si non connue) 
      , @DesInstallPrevue AS DATE                          -- date prévue de désinstallation (9999-12-31 si non connue)
      , @TypeOperation AS CHAR(1)                          -- type de mise à jour : 'i' si INSERT, 'u' si 'UPDATE'
      , @ComposantType AS CHAR(1)                          -- type de composant ('c', 't', 'x', 'a')
      , @BilocationEffective AS CHAR(1) = 'n' OUTPUT       -- 'n' si pas de chevauchement de périodes ; 'y' si chevauchement
      , @TypeLocalisation AS CHAR(1) = '?' OUTPUT          -- 'camion' ou 'local' ou 'axle' ou inconnu
      , @LocalisationEnCours AS VARCHAR(32) = '?' OUTPUT   -- Camion VIN ou Local Code ou axle serial number hébergeant déjà le composant 
      , @InstallDejaFaite AS DATE OUTPUT                   -- Date d'installation en cours
      , @DesInstallDejaFaite AS DATE OUTPUT                -- Date de désinstallation correspondante
    )
    AS
    BEGIN
    
    DECLARE @N AS INT ;
    DECLARE @LocalisationEnCoursId AS INT ;
    DECLARE @TypeLocalisationCamion AS CHAR(1) = 'c'
    DECLARE @TypeLocalisationLocal AS CHAR(1) = 'l'
    DECLARE @TypeLocalisationAxle AS CHAR(1) = 'a'
    DECLARE @Infini AS DATE = '9999-12-31'
    DECLARE @TypeOperInsert AS CHAR(1) = 'i'
    DECLARE @TypeOperUpdate AS CHAR(1) = 'u'
    
    ---- pour debug ---- SELECT 'BILOCATION_CONTROLE_PROC (entrée !)'
    ---- pour debug ---- SELECT @TypeOperation as '@TypeOperation (BILOCATION_CONTROLE_PROC)'
    ---- pour debug ---- SELECT @ComposantType as '@ComposantType'
    ---- pour debug ---- SELECT @LocalisationPrevueId as '@LocalisationPrevueId (BILOCATION_CONTROLE_PROC)'
    ---- pour debug ---- SELECT @InstallPrevue as '@InstallPrevue (BILOCATION_CONTROLE_PROC)'
    ---- pour debug ---- SELECT @DesInstallPrevue as '@DesInstallPrevue (BILOCATION_CONTROLE_PROC)'
    
    SET @BilocationEffective = 'n'
    
    ---------------------------------------------------------------
    -- Le contrôle nécessite que la date prévue d'installation 
    -- soit antérieure à celle de désinstallation.
    -- L'objet n'est pas de signaler une erreur éventuelle,
    -- ceci est du ressort des autres contraintes. 
    ---------------------------------------------------------------
    
    IF @DesInstallPrevue <= @InstallPrevue AND @InstallPrevue <> @Infini
        BEGIN
            ---- select 'antériotité !'
            RETURN
        END
    
    ------------------------------------------------------------------------
    -- Le curseur utilisé pour comparer la période prévue
    -- d'installation avec chaque installation effective
    -- pour un camion (ou un local) et un composant donnés. 
    -- En effet, un composant a pu être installé plus 
    -- d'une fois sur un camion (ou dans un local) : ne pas
    -- mélanger leurs périodes ! 
    --
    -- Le SELECT est composé de 2 subselects.
    -- Le 1er subselect permet de traiter des moteurs, transmissions et essieux
    -- installés sur des camions ou dans des locaux, ainsi que des 
    -- différentiels dans les locaux (un difféntiel n'est
    -- jamais directement installé sur un camion).
    -- Le 2e subselect permet de prendre en compte les différentiels
    -- installés sur des essieux. 
    -------------------------------------------------------------------------
    
    DECLARE theCurseur CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY 
        FOR SELECT LocalisationId, ComposantInstallationDate, ComposantDesInstallationDate 
            FROM   COMPOSANT_AFFECTATION AS x
              JOIN COMPOSANT AS y ON x.ComposantId = y.ComposantId 
            WHERE  x.ComposantId = @ComposantPrevuId
               AND ComposantType = @ComposantType
           UNION ALL
            SELECT AxleId, DiffInstalDate, DiffDesInstalDate
            FROM   DIFF_AXLE AS x
              JOIN DIFFERENTIAL AS y ON x.DiffId = y.DiffId
            WHERE  x.DiffId =  @ComposantPrevuId 
           ;
    
    OPEN theCurseur
    
    ---- pour debug ---- select 'open csr' 
    
    ----------------------------------------------------------------------
    -- Lecture de la 1re ligne du curseur (table COMPOSANT_AFFECTATION)
    ----------------------------------------------------------------------
    
    FETCH theCurseur INTO 
        @LocalisationEnCoursId, @InstallDejaFaite, @DesInstallDejaFaite
    
    ---- pour debug ---- select  @LocalisationEnCoursId as '@LocalisationEnCoursId'
    ---- pour debug ---- select '' as lieu, * from local where LocalisationId = @LocalisationEnCoursId
    ---- pour debug ---- select  @@FETCH_STATUS as ' @@FETCH_STATUS'
    
    WHILE @@FETCH_STATUS = 0 AND @BilocationEffective = 'n'
    
        -------------------------------------------------------------
        -- tant que le curseur produit,
        -- on traite le tuple lu.
        -------------------------------------------------------------
    
        BEGIN 
    
            -----------------------------------------------
            -- On cherche les bilocations 
            -- avec les autres objets (camions ou locaux)
            -----------------------------------------------
    
    ---pour debug ---- select @InstallDejaFaite as '@InstallDejaFaite'
    ---pour debug ---- select @DesInstallDejaFaite as '@DesInstallDejaFaite'
    
            IF @TypeOperation = @TypeOperUpdate AND @LocalisationPrevueId = @LocalisationEnCoursId
                BEGIN
                    ----------------------------------------------------------------------   
                    --  (γ > ⍺ ∔ ⍺ = ∞) ∙ δ ≤ β ∔ γ = ⍺ ∙ δ < β ∔ δ ≤ ⍺ ∔ γ ≥ β   
                    -----------------------------------------------------------------------
                    IF NOT (
                            (@InstallPrevue > @InstallDejaFaite OR @InstallDejaFaite = @Infini) AND @DesInstallPrevue <= @DesInstallDejaFaite
                               OR @InstallPrevue = @InstallDejaFaite AND @DesInstallPrevue < @DesInstallDejaFaite
                               OR @DesInstallPrevue <= @InstallDejaFaite OR @InstallPrevue >= @DesInstallDejaFaite
                           )
                        BEGIN
                            SET  @BilocationEffective = 'y'
                        END                                      
                END
            ELSE
                BEGIN
                    -------------------------------------------------------------
                    --  δ ≤ ⍺ ∙ ⍺ ≠ ∞ ∙ δ ≠ ∞ ∔ γ ≥ β ∙ β ≠ ∞ ∙ γ ≠ ∞  
                    -------------------------------------------------------------
                    IF NOT (@DesInstallPrevue <= @InstallDejaFaite AND @InstallDejaFaite <> @Infini AND @DesInstallPrevue <>  @Infini
                            OR @InstallPrevue >= @DesInstallDejaFaite AND @DesInstallDejaFaite <> @Infini AND @InstallPrevue <>  @Infini)
                        BEGIN 
                            SET @BilocationEffective = 'y'
                        END
                END
        ----ENDIF
    
    --- pour debug --- select @BilocationEffective as '@BilocationEffective' 
    
            ----------------------------------------------------------
            -- Tentative de bilocation.
            -- L'affectation en cours concerne soit un camion,
            -- soit un local, soit un essieu (pour un différentiel).
            ----------------------------------------------------------
            
            IF @BilocationEffective = 'y'
                BEGIN 
                    SET @TypeLocalisation = '?'          
                    SET @LocalisationEnCours = '?'  
    
                    IF EXISTS (SELECT '' FROM CAMION WHERE CamionId = @LocalisationEnCoursId) 
                        BEGIN
                            SET @TypeLocalisation = @TypeLocalisationCamion ;
                            SET @LocalisationEnCours = (SELECT CamionVIN 
                                                        FROM CAMION 
                                                        WHERE CamionId = @LocalisationEnCoursId)
                        END
                    ELSE
                        BEGIN
                            IF EXISTS (SELECT '' FROM LOCAL WHERE LocalisationId = @LocalisationEnCoursId)
                                BEGIN
                                    SET @TypeLocalisation = @TypeLocalisationLocal ;
                                    SET @LocalisationEnCours = (SELECT LocalCode 
                                                                FROM LOCAL 
                                                                WHERE LocalisationId = @LocalisationEnCoursId)
                                END
                            ELSE
                                IF EXISTS (SELECT '' FROM AXLE WHERE ComposantId = @LocalisationEnCoursId)
                                    BEGIN
                                        SET @TypeLocalisation = @TypeLocalisationAxle ;
                                        SET @LocalisationEnCours = (SELECT AxleSerialNumber 
                                                                    FROM AXLE 
                                                                    WHERE ComposantId = @LocalisationEnCoursId)
                                    END
                        END
                END
    
    --- pour debug --- select @LocalisationEnCours as '@LocalisationEnCours' 
    --- pour debug --- select @TypeLocalisation as '@TypeLocalisation' 
            
            --------------------------------------------
            -- On entame le tour de manège suivant,
            -- à cheval sur le curseur.
            --------------------------------------------
    
            ---- pour debug --- select 'fetch suivant' 
    
            IF @BilocationEffective = 'n'
                BEGIN
                    FETCH theCurseur INTO 
                        @LocalisationEnCoursId, @InstallDejaFaite, @DesInstallDejaFaite
    
                    ---- pour debug ---- select  @@FETCH_STATUS as ' @@FETCH_STATUS'
                END
    
        -- LOOP  -- c'est reparti pour un tour
       
        --------------------------------------------
        -- Fin des tours de manège
        --------------------------------------------
    
        END         
    
    CLOSE theCurseur
    DEALLOCATE theCurseur
    
    ---- pour debug ---- SELECT 'BILOCATION_CONTROLE_PROC (sortie !)'
    
    END   -- fin procédure
    
    
      0  0

  13. #993
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 004
    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 004
    Points : 30 928
    Points
    30 928
    Billets dans le blog
    16
    Par défaut
    A propos des combos.

    Le domaine des combos n’est pas le mien, mais il faudrait déjà qu’on se mette d’accord sur certains points touchant aux généralités.

    Partons par exemple du plus haut niveau « hiérarchique » : tout en haut sont les headquarters. Ceux-ci ont des propriétés qui leurs sont propres et ne sont pas sujettes à combo : Contact Name, Civic Number, Street Name, Phone Number, etc. Par contre, le type de contact ne peut pas être inventé par l’utilisateur et doit être choisi dans la liste fournie par la table CONTACT_TYPE : cette table fait donc l’objet d’une combo.

    La propriété Province peut faire l’objet d’une combo. A cette occasion, je me rends compte que la table CONTACT viole la troisième forme normale, car il existe des dépendances fonctionnelles telles que PostalCode → Province (un code postal ne fait mention que d’une seule province), et en principe PostalCode → City. Je propose — et ce n’est pas le Capitaine qui me contredira — qu’on mette en oeuvre une table CITY pour régulariser la situation (et faciliter la « comboïsation »). A défaut, on contrôlera les dépendances fonctionnelles par un trigger plaqué sur la table CONTACT...

    En descendant dans la hiérarchie, on rencontre la table MANUFACTURER. Comme pour les headquarters, les manufacturiers ont leurs propriétés propres non sujettes à combo (Contact Name, Civic Number, Street Name, Phone Number, etc.), par contre un manufacturier fait référence à un headquarters, donc en toute logique, les noms de ces derniers doivent faire l’objet d’une combo : la vue HEADQUARTERS_V est donc partie prenante dans cette histoire.

    En descendant à nouveau dans la hiérarchie, on rencontre les tables TRUCK_MODEL et COMPONENT_MODEL. Un modèle de camion fait référence à un manufacturier, donc les noms des manufacturiers devraient faire l’objet d’une combo : la vue MANUFACTURER_V est impliquée. De même, un modèle de composant fait référence à un manufacturier, donc la combo à l’usage des modèles de camions est partie prenante. Comme on a quatre catégories de composants (cf. colonne ModelCategory de la table COMPONENT_MODEL et de la vue COMPONENT_MODEL_V), ces catégories (engine, transmission, axle, differential) devraient faire l’objet d’une combo.

    En continuant à descendre dans la hiérarchie, on en arrive par exemple aux camions : clairement, les paires manufacturiers/modèles de camions devraient en l’occurrence faire l’objet d’une combo. Même chose pour la couleur des camions.

    De même on en arrive aux composants : là encore, les paires manufacturiers/modèles de composants devraient faire l’objet d’une combo. Pour chaque catégorie de composant on devrait avoir une combo des propriétés-types (Max Horse Power, Engine Max RPM, Engine Max Torque pour les camions, Speed, Torque, Type (primary, auxiliary) pour les transmissions, etc.), sachant toutefois que pour le moment, seules les transmissions disposent des propriétés-types (table COMPONENT_MODEL_TRANSMISSION, vue COMPONENT_MODEL_TRANSMISSION_V).

    Etc.


    Au besoin on peut faire des vues sur des vues.

    Exemple des noms des headquarters en vue d’une combo d’iceux :

    CREATE VIEW HEADQUARTERS_NAMES_V (ContactName)
    AS
     SELECT ContactName
     FROM   HEADQUARTERS_V 
     ;
    
    Un select =>

    ContactName
    -----------
    Daimler
    Navistar
    Paccar
    Compagnie internationale DAC
    Compagnie internationale Naudin
    Eaton
    Meritor Inc.
    Mercedes Benz
    Timkem
    

    Dans ces histoires de combos, est-ce que PHP (ou autre trouble-fête furonculosé) se mêle de ficher la zoubia ?
    (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

  14. #994
    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
    Je ne saisis pas exactement.....

    Chaque ville ou village à son propre code postal

    Par contre à l'intérieur d'une même province nous avons des villages différents qui porte le même nom et nous avons aussi dans différentes provinces des noms de villages qui se répètent... Il faut donc toujours faire sur du code postal pour la livraison de courrier de marchandise. Il y a même à l'intérieur d'une même ville des rues différentes qui portent le même nom. Comme à Montréal, il y a eu regroupement de plusieurs villes alors maintenant différent quartiers de Montréal se retrouvent avec des noms de rues identiques, ça devient mêlant pour faire les livraisons hahaha...

    Lorsque je parle de Combo, je parle disons pour la vue CAMIN_LOCALISATION_V
    L'utilisateur aura à choisir le manufacturier et le modèle. Je peux mettre le Manufacturier dans un Combo et le Modèle dans un autre Combo. Je peux aussi chaîner les deux Combo entre eux... Là l'utilisateur n'a pas le choix, il ne peut pas créer de Manufacturier ou de Modèle à la volée, il doit choisir un manufacturier qui existe dans la Manufacturer_v. Le problème c'est que la vue MANUFACTURER_V ne contient pas seulement des Manufacturiers. Le problème du problème est que si je code en hard les choix des manufacturiers dans un combo, si le client ajoute un nouveau manufacturier, le nouveau manufacturier ne sera pas inclus dans le combo. Donc, je peux créer un combo pour des choix soft qui se remplit automatiquement d'après la vue MANUFACTURER_V mais là il se retrouvera avec des choix qui n'ONT rien à voir avec des manufacturiers de camions, ils aura dans le combo tout ce que contient la vue MANUFACTURER_V. Est-ce que vous saisissez ce que j'essaie d'expliquer ? Je ne veux pas que dans le combo Manufacturier d'un camion que le client choisisse Timken, Timken n'est pas un manufacturier de camion, il est un manufacturier de pièces de camions. Donc si je laisse le combo Manufacturer se remplir automatiquement, je dois lui indiquer comment se remplir automatiquement d'après la vue MANUFACTURER_V.



    Citation Envoyé par fsmrel Voir le message
    A propos des combos.

    La propriété Province peut faire l’objet d’une combo. A cette occasion, je me rends compte que la table CONTACT viole la troisième forme normale, car il existe des dépendances fonctionnelles telles que City → Province (une city ne fait mention que d’une seule province), City → PostalCode, et en principe PostalCode → City. Je propose — et ce n’est pas le Capitaine qui me contredira — qu’on mette en oeuvre une table CITY pour régulariser la situation (et faciliter la « comboïsation »). A défaut, on contrôlera les dépendances fonctionnelles par un trigger plaqué sur la table CONTACT...
      0  0

  15. #995
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 004
    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 004
    Points : 30 928
    Points
    30 928
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par ordigil
    Je ne saisis pas exactement.
    Je reprendrai votre message demain. En attendant, j'ai modifié mon message précédent, puisque le même nom de ville peut faire référence à plus d'une province.

    Traitons déjà celui-ci :


    Citation Envoyé par ordigil
    D'où ma dernière question si on devrait ajouter une colonne supplémentaire dans la Table CONTACT.
    D’accord pour ajouter un colonne pour le type de contact (headquarters, manufacturier, shop, anonyme), mais avec cet ajout de colonne, on devra s’assurer de la cohérence des données (un trigger s’en chargera).

    En attendant, voici comment procéder pour la mise en oeuvre :

    on n’insérera dans la table HEADQUARTERS que des lignes pour lesquelles la nouvelle colonne ContactTypeId (cf. ci-dessous) fait référence à la colonne ContactTypeId de la table CONTACT_TYPE telle que celle-ci a la valeur 'h', même principe pour les tables MANUFACTURER et SHOP.

    Cette typologie fera donc l’objet d’une table CONTACT_TYPE :



    Colonnes de la table CONTACT_TYPE :

    — ContactTypeId :

    Pour mise en oeuvre d’une clé primaire artificielle (IDENTITY).

    — ContactTypeName :

    Nom du type de contact : {'Headquarters', 'Manufacturer', 'Shop', 'Anonymous'} où 'Anonymous' est utilisé pour des contacts qui ne sont pas des types de contact spécifiques (autres donc que Headquarters, Manufacturer, Shop), liste pouvant être complétée par de nouveaux types de contacts spécifiques.

    — ContactTypeShort :

    Synonyme abrégé du nom du type de contact : 'h' pour 'Headquarters', 'm' pour 'Manufacturer', 's' pour 'Shop', 'z' pour 'Anonymous'.


    Pour créer la table CONTACT_TYPE :

    CREATE TABLE CONTACT_TYPE
    (
            ContactTypeId             INT   IDENTITY    NOT NULL
          , ContactTypeName           VARCHAR(32)       NOT NULL
          , ContactTypeShort          CHAR(1)           NOT NULL
        , CONSTRAINT CONTACT_TYPE_PK PRIMARY KEY (ContactTypeId)
        , CONSTRAINT CONTACT_TYPE_NAME UNIQUE (ContactTypeName)
        , CONSTRAINT CONTACT_TYPE_SHORT UNIQUE (ContactTypeShort)
    )
    ;
    
    Pour les valeurs :

    SET IDENTITY_INSERT CONTACT_TYPE OFF ;
    DBCC CHECKIDENT (CONTACT_TYPE, RESEED, 1) ;
    
    INSERT INTO CONTACT_TYPE (ContactTypeName, ContactTypeShort) 
        VALUES ('Headquarters', 'h')
             , ('Manufacturer', 'm')
             , ('Shop', 's')
             , ('Anonymous', 'z')
    ;
    
    Pour connecter la table CONTACT :

    (1) Ajout de la colonne ContactTypeId (NULL) :

    ALTER TABLE CONTACT ADD ContactTypeId INTEGER ;
    

    (2) Valorisation de la colonne ContactTypeId de la table CONTACT à partir du contenu des tables HEADQUARTERS, MANUFACTURER, SHOP :

      -----------------------------------------------------------------
      -- mise à jour de la colonne ContactTypeId de la table CONTACT
      ------------------------------------------------------------------
    UPDATE CONTACT 
       SET ContactTypeId = 
           (SELECT ContactTypeId 
            FROM   CONTACT_TYPE 
            WHERE  ContactTypeShort = 'h') 
       WHERE ContactId IN (SELECT HeadquartersId FROM HEADQUARTERS)
    ;
    UPDATE CONTACT 
       SET ContactTypeId = 
           (SELECT ContactTypeId 
            FROM   CONTACT_TYPE 
            WHERE  ContactTypeShort = 'm') 
       WHERE ContactId IN (SELECT ManufacturerId FROM MANUFACTURER)
    ;
    UPDATE CONTACT 
       SET ContactTypeId = 
           (SELECT ContactTypeId 
            FROM   CONTACT_TYPE 
            WHERE  ContactTypeShort = 's') 
       WHERE ContactId IN (SELECT shopId FROM SHOP)
    ;
    

    (3) La colonne ContactTypeId passe à NOT NULL et on met en oeuvre la clé étrangère connectant CONTACT sur CONTACT_TYPE :

     
    ---------------------------
    -- NOT NULL
    ---------------------------
    ALTER TABLE CONTACT ALTER COLUMN ContactTypeId INT NOT NULL ;
    
    ----------------------------------------------------
    -- on claque la clé étrangère
    ----------------------------------------------------
    
    ALTER TABLE CONTACT ADD CONSTRAINT CONTACT_CONTACT_TYPE_FK FOREIGN KEY (ContactTypeId)
          REFERENCES CONTACT_TYPE (ContactTypeId)  
    
    Maintenant, concernant la combo des types de contacts :

    On pourrait mettre en oeuvre une procédure stockée, que vous appelleriez en lui passant en paramètre le type de contact et les valeurs des colonnes habituelles de la table CONTACT fournies par l’utilisateur. Cette procédure se chargerait alors de faire la mise à jour de la vue correspondante : HEADQUARTERS_V, MANUFACTURER_V, SHOP_V (voire une nouvelle vue CONTACT_ANONYMOUS si Contact Type anonyme).


    Si tout cela vous convient, je mettrai DZINDZIO_TRUCKS_MANAGEMENT_TEMP à niveau.
    (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.
      3  0

  16. #996
    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
    Oh wowwwwwww je n'avais même pas penser qu'on pouvait automatiser le processus hahaha Vous pensez vraiment à tous. Il faut aussi donner à l'utilisateur un moyen d'ajouter d'autres contacts en plus des Headquarters, Manufacturer et Shop... Genre : PartStore, PartManufacturer, Customer, etc...





    Citation Envoyé par fsmrel Voir le message
    Je reprendrai votre message demain. En attendant, j'ai modifié mon message précédent, puisque le même nom de ville peut faire référence à plus d'une province.

    Traitons déjà celui-ci :




    D’accord pour ajouter un colonne pour le type de contact (headquarters, manufacturier, shop, anonyme), mais avec cet ajout de colonne, on devra s’assurer de la cohérence des données (un trigger s’en chargera).

    En attendant, voici comment procéder pour la mise en oeuvre :

    on n’insérera dans la table HEADQUARTERS que des lignes pour lesquelles la nouvelle colonne ContactTypeId (cf. ci-dessous) fait référence à la colonne ContactTypeId de la table CONTACT_TYPE telle que celle-ci a la valeur 'h', même principe pour les tables MANUFACTURER et SHOP.

    Cette typologie fera donc l’objet d’une table CONTACT_TYPE :



    Colonnes de la table CONTACT_TYPE :

    — ContactTypeId :

    Pour mise en oeuvre d’une clé primaire artificielle (IDENTITY).

    — ContactTypeName :

    Nom du type de contact : {'Headquarters', 'Manufacturer', 'Shop', 'Anonymous'} où 'Anonymous' est utilisé pour des contacts qui ne sont pas des types de contact spécifiques (autres donc que Headquarters, Manufacturer, Shop), liste pouvant être complétée par de nouveaux types de contacts spécifiques.

    — ContactTypeShort :

    Synonyme abrégé du nom du type de contact : 'h' pour 'Headquarters', 'm' pour 'Manufacturer', 's' pour 'Shop', 'z' pour 'Anonymous'.


    Pour créer la table CONTACT_TYPE :

    CREATE TABLE CONTACT_TYPE
    (
            ContactTypeId             INT   IDENTITY    NOT NULL
          , ContactTypeName           VARCHAR(32)       NOT NULL
          , ContactTypeShort          CHAR(1)           NOT NULL
        , CONSTRAINT CONTACT_TYPE_PK PRIMARY KEY (ContactTypeId)
        , CONSTRAINT CONTACT_TYPE_NAME UNIQUE (ContactTypeName)
        , CONSTRAINT CONTACT_TYPE_SHORT UNIQUE (ContactTypeShort)
    )
    ;
    
    Pour les valeurs :

    SET IDENTITY_INSERT CONTACT_TYPE OFF ;
    DBCC CHECKIDENT (CONTACT_TYPE, RESEED, 1) ;
    
    INSERT INTO CONTACT_TYPE (ContactTypeName, ContactTypeShort) 
        VALUES ('Headquarters', 'h')
             , ('Manufacturer', 'm')
             , ('Shop', 's')
             , ('Anonymous', 'z')
    ;
    
    Pour connecter la table CONTACT :

    (1) Ajout de la colonne ContactTypeId (NULL) :

    ALTER TABLE CONTACT ADD ContactTypeId INTEGER ;
    

    (2) Valorisation de la colonne ContactTypeId de la table CONTACT à partir du contenu des tables HEADQUARTERS, MANUFACTURER, SHOP :

      -----------------------------------------------------------------
      -- mise à jour de la colonne ContactTypeId de la table CONTACT
      ------------------------------------------------------------------
    UPDATE CONTACT 
       SET ContactTypeId = 
           (SELECT ContactTypeId 
            FROM   CONTACT_TYPE 
            WHERE  ContactTypeShort = 'h') 
       WHERE ContactId IN (SELECT HeadquartersId FROM HEADQUARTERS)
    ;
    UPDATE CONTACT 
       SET ContactTypeId = 
           (SELECT ContactTypeId 
            FROM   CONTACT_TYPE 
            WHERE  ContactTypeShort = 'm') 
       WHERE ContactId IN (SELECT ManufacturerId FROM MANUFACTURER)
    ;
    UPDATE CONTACT 
       SET ContactTypeId = 
           (SELECT ContactTypeId 
            FROM   CONTACT_TYPE 
            WHERE  ContactTypeShort = 's') 
       WHERE ContactId IN (SELECT shopId FROM SHOP)
    ;
    

    (3) La colonne ContactTypeId passe à NOT NULL et on met en oeuvre la clé étrangère connectant CONTACT sur CONTACT_TYPE :

     
    ---------------------------
    -- NOT NULL
    ---------------------------
    ALTER TABLE CONTACT ALTER COLUMN ContactTypeId INT NOT NULL ;
    
    ----------------------------------------------------
    -- on claque la clé étrangère
    ----------------------------------------------------
    
    ALTER TABLE CONTACT ADD CONSTRAINT CONTACT_CONTACT_TYPE_FK FOREIGN KEY (ContactTypeId)
          REFERENCES CONTACT_TYPE (ContactTypeId)  
    
    Maintenant, concernant la combo des types de contacts :

    On pourrait mettre en oeuvre une procédure stockée, que vous appelleriez en lui passant en paramètre le type de contact et les valeurs des colonnes habituelles de la table CONTACT fournies par l’utilisateur. Cette procédure se chargerait alors de faire la mise à jour de la vue correspondante : HEADQUARTERS_V, MANUFACTURER_V, SHOP_V (voire une nouvelle vue CONTACT_ANONYMOUS si Contact Type anonyme).


    Si tout cela vous convient, je mettrai DZINDZIO_TRUCKS_MANAGEMENT_TEMP à niveau.
      0  0

  17. #997
    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
    Oui vous pouvez y aller avec la mise à niveau de DZINDZIO_TRUCKS_MANAGEMENT_TEMP. Je mettrai ensuite à jour ..._GILLES et je ferai une première tentative avec un Combobox.
      0  0

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

    Citation Envoyé par ordigil
    vous pouvez y aller avec la mise à niveau de DZINDZIO_TRUCKS_MANAGEMENT_TEMP.
    J’ai donc effectué les opérations suivantes :

    (1) Création de la table CONTACT_TYPE avec les valeurs suivantes :

    ContactTypeName    ContactTypeShort
    ---------------    ----------------
    Headquarters       h 
    Manufacturer       m 
    Shop               s
    Anonymous          z 
    
    (2) Mise à niveau de la table CONTACT : création de la colonne ContactTypeId pour établir la relation avec la table CONTACT_TYPE.

    (3) Valorisation de la colonne ContactTypeId de la table CONTACT.

    (4) Mise à niveau de la table CONTACT : mise en oeuvre de la clé étrangère {ContactTypeId} en relation avec la clé primaire {ContactTypeId} de la table CONTACT_TYPE.

    (5) Création de la vue CONTACT_TYPE_V :

    CREATE VIEW CONTACT_TYPE_V (ContactTypeName, ContactTypeShort)
    AS
     SELECT ContactTypeName, ContactTypeShort
     FROM   CONTACT_TYPE  
     ;
    
    (6) Création des triggers de la vue CONTACT_TYPE :

    — CONTACT_TYPE_INSERT_TR

    — CONTACT_TYPE_UPDATE_TR

    (7) Création d’une vue CONTACT_TYPE_COMBO_V vous permettant de tester une combo façon « Hello World ! » :

    CREATE VIEW CONTACT_TYPE_COMBO_V (ContactTypeName)
    AS
     SELECT ContactTypeName
     FROM   CONTACT_TYPE  
     ;
    
    =>

    ContactTypeName
    ---------------
    Headquarters 
    Manufacturer 
    Shop 
    Anonymous 
    

    Reste à faire : assurer la cohérence du contenu des tables HEADQUARTERS, MANUFACTURER, SHOP par rapport à la table CONTACT_TYPE.

    Merci de secouer tout ça…
    (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

  19. #999
    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
    Bonjour fsmrel ;-)

    J'ai l'air un peu silencieux mais je regarde ce que vous avez fait. J'ai un problème sur le site web pour la mise à jour de la vue CAMION_LOCALISATION_V. Ça fonctionne à l'aide de vos triggers en passant par MSSMS mais en passant par le site web ça ne fonctionne pas. :-(

    Ça ça passe haut la main dans MSSMS mais sur le sur web c'est une autre histoire, ça ne passe pas. Si je veux que ça fonctionne, je dois tout refaire le site WEB différemment à partir de zéro car mon modèle de développement du site WEB ne fonctionne plus avec la façon que la base de données fonctionne… Je vais regarder si je peux arriver à quelque chose en concevant le site WEB avec Visual Studio.. Je pense que je n'ai plus le choix que d'utiliser à fond du JScript. Des centaines d'heures de plaisir assurées hahaha. Mes combo box ne fonctionnent pas du tout pour l'instant et ne fonctionneront jamais de la façon je que procède présentement, sans clé primaire ça ne fonctionnera jamais alors je dois tout refaire à partir de zéro. Et je dois aussi penser aux vues TRUCK_PURCHASE et TRUCK_SALE, un camion ne peut pas entrer la base de données comme par magie, il doit passer par TRUCK_PURCHASE. Donc pour l'instant le site web n'est d'aucune utilité pour vous, on arrive à rien en passant par le site WEB. Je vais essayer autre chose…

    USE [DZINDZIO_TRUCKS_MANAGEMENT_TEMP]
    GO
    
    BEGIN TRANSACTION
    
    SELECT * FROM CAMION_LOCALISATION_V
    
    UPDATE [dbo].[CAMION_LOCALISATION_V]
       SET [Manufacturer] = 'Kenworth'
          ,[Model] = 'T600'
          
     WHERE VIN ='vin17'
    GO
     SELECT * FROM CAMION_LOCALISATION_V
    
     ROLLBACK
    
      0  0

  20. #1000
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 004
    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 004
    Points : 30 928
    Points
    30 928
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par fsmrel
    Reste à faire : assurer la cohérence du contenu des tables HEADQUARTERS, MANUFACTURER, SHOP par rapport à la table CONTACT_TYPE.
    En fait, la cohérence est assurée de facto : supposons qu’on veuille créer le Shop 'Escartefigue'. On exécute pour cela l’instruction :

    INSERT INTO SHOP_V (ContactName)
        SELECT  'Escartefigue'
    ;
    
    La mise à jour de la table CONTACT est effectuée au moyen du trigger SHOP_INSERT_TR :

    INSERT INTO CONTACT (ContactName
                       , ContactTypeId
                       , CivicNumber, StreetName, City, Province, PostalCode
                       , PhoneNumber, WattLine, FaxNumber, CellNumber
                       , WebSite, FirstContactName)
         SELECT ContactName
              , (SELECT  ContactTypeId 
                 FROM    CONTACT_TYPE 
                 WHERE LOWER(ContactTypeName) = 'shop')
              , COALESCE (CivicNumber, '-')
              , COALESCE (StreetName, '-')
              , COALESCE (City, '-')
              , COALESCE (Province, '---')
              , COALESCE (PostalCode, '--- ---')
              , COALESCE (PhoneNumber, '000-000-0000')
              , COALESCE (WattLine, '000-000-0000')
              , COALESCE (FaxNumber, '000-000-0000')
              , COALESCE (CellNumber, '000-000-0000')
              , COALESCE (WebSite, '-')
              , COALESCE (FirstContactName, '-')
         FROM  INSERTED
    ;
    
    Où l’on voit que la colonne ContactTypeId est donc forcément en phase avec le type 'Shop' de la table CONTACT_TYPE.
    (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

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