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

Modélisation Discussion :

Validation diagramme bdd


Sujet :

Modélisation

  1. #81
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Du coup, j'ai commencé le développement avec cette base et je me posais juste une petite question sur les reqûetes (cela déborde du sujet initial mais promis j'arrête après ou j'ouvre un autre sujet)

    Quand on fait son INNER JOIN sur des tables à clé primaires multiples, est-ce qu'il y a un intérêt à mettre les 2 clés primaires dans l'INNER JOIN ou un seul ?

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM PROJET INNER JOIN MOT ON PROJET.id_projet = MOT.id_projet AND PROJET.id_client = MOT.id_client
    Ou alors cela est suffisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM PROJET INNER JOIN MOT ON PROJET.id_projet = MOT.id_projet
    Si la dernière version de création de la BDD est ok, je vais clôturer ce sujet avec un beau "Résolu" bien mérité !

    Merci beaucoup
    Orygynz

  2. #82
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 6 981
    Points : 26 180
    Points
    26 180
    Billets dans le blog
    16
    Par défaut
    Bonne année à vous aussi Orygynz,


    A propos de la question que vous vous posez :

    Attention ! Id_Projet est un séquenceur relatif à Id_client, c'est-à-dire que pour chaque client/projet, Id_Projet commenceà 1. Considérez le jeu d’essai suivant :


    INSERT INTO CLIENT (id_client, Clientnom) VALUES (1, 'Ets Naudin') ;
    INSERT INTO CLIENT (id_client, Clientnom) VALUES (2, 'Volfoni SA') ;
    INSERT INTO CLIENT (id_client, Clientnom) VALUES (3, 'Dubicobit') ;
    
    SELECT *, '' AS '<= CLIENT' FROM CLIENT ;
    
    INSERT INTO TACHE (id_tache, TacheNom) VALUES (1, 'tâche 1') ;
    INSERT INTO TACHE (id_tache, TacheNom) VALUES (2, 'tâche 2') ;
    INSERT INTO TACHE (id_tache, TacheNom) VALUES (3, 'tâche 3') ;
    INSERT INTO TACHE (id_tache, TacheNom) VALUES (4, 'tâche 4') ;
    
    SELECT *, '' AS '<= TACHE' FROM TACHE ;
    
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (1, 1, 1, 'réf 1 Naudin', 'provençal') ;
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (1, 2, 1, 'réf 2 Naudin', 'chitimi') ;
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (1, 3, 1, 'réf 2 Naudin', 'gallois') ;
    
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (2, 1, 1,  'réf 1 de Volfoni', 'javanais') ;
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (2, 2, 1,  'réf 2 de Volfoni', 'quebecois') ;
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (2, 3, 1,  'réf 3 de Volfoni', 'breton') ;
    
    INSERT INTO PROJET (id_client, id_projet, id_tache, Reference, LangueSource) VALUES (3, 1, 2, 'réf 1 de Dubicobit', 'basque') ;
    
    SELECT *, '' AS '<= PROJET' FROM PROJET ;
    -- --------------------------------------------------------------------------------------
    
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (1, 1, 123456789, '2015_01_26') ;
    
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (1, 2, 145320147, '2015_01_26') ;
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (1, 3, 158500036, '2015_01_27') ;
    
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (2, 1, 247820143, '2015_01_26') ;
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (2, 2, 257896022, '2015_01_27') ;
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (2, 3, 281478943, '2015_01_28') ;
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (2, 4, 291475478, '2015_01_29') ;
    
    INSERT INTO FACTURE (id_client, id_facture, num_facture, date_facture) VALUES (3, 1, 347820143, '2015_01_19') ;
    
    SELECT *, '' AS '<= FACTURE' FROM FACTURE ;
    
    
    INSERT INTO FORFAIT (id_client, id_projet, tarif_forfait) VALUES (1, 1,10000) ;
    
    SELECT *, '' AS '<= FORFAIT' FROM FORFAIT ;
    
    
    INSERT INTO  MOT (id_client, id_projet, id_mot, NbMots, Tarif, MatchValeur) VALUES (1, 1, 0, 50, 100, 'doublonne avec FORFAIT !') ;
    
    INSERT INTO  MOT (id_client, id_projet, id_mot, NbMots, Tarif, MatchValeur) VALUES (1, 2, 0, 50, 100, 'Bonjour Madame') ;
    INSERT INTO  MOT (id_client, id_projet, id_mot, NbMots, Tarif, MatchValeur) VALUES (1, 2, 0, 50, 200, 'Bonsoir Monsieur') ;
    
    INSERT INTO  MOT (id_client, id_projet, id_mot, NbMots, Tarif, MatchValeur) VALUES (2, 1, 0, 10, 300, 'Sorry') ;
    INSERT INTO  MOT (id_client, id_projet, id_mot, NbMots, Tarif, MatchValeur) VALUES (2, 1,  0, 10, 400, 'Query') ;
    INSERT INTO  MOT (id_client, id_projet, id_mot, NbMots, Tarif, MatchValeur) VALUES (2, 1, 0, 10, 500, 'Language') ; 
    Si vous codez :

    SELECT * FROM PROJET INNER JOIN MOT ON PROJET.id_projet = MOT.id_projet AND PROJET.id_client = MOT.id_client ; 
    Alors vous obtiendrez le résultat suivant :

    id_client  id_projet  id_tache  Reference         LangueSource  id_client  id_projet  id_mot  NbMots  Tarif  MatchValeur
    ---------  ---------  --------  ---------          -----------  ---------  ---------  ------  ------  -----  -----------
            1          2         1  réf 2 Naudin       chitimi              1          2       1      50    100   Bonjour Madame
            1          2         1  réf 2 Naudin       chitimi              1          2       2      50    200   Bonsoir Monsieur
            2          1         1  réf 1 de Volfoni   javanais             2          1       1      10    300   Sorry
            2          1         1  réf 1 de Volfoni   javanais             2          1       2      10    400   Query
            2          1         1  réf 1 de Volfoni   javanais             2          1       3      10    500   Language

    Mais si vous codez :

    SELECT * FROM PROJET INNER JOIN MOT ON PROJET.id_projet = MOT.id_projet 
    Alors le résultat est le suivant, dans lequel les données de Naudin sont mélangées avec celles de Volfoni et de Dubicobit, ce qui est clairement une erreur... :

    id_client  id_projet  id_tache  Reference         LangueSource  id_client  id_projet  id_mot  NbMots  Tarif  MatchValeur
    ---------  ---------  --------  ---------          -----------  ---------  ---------  ------  ------  -----  -----------
            1          2         1  réf 2 Naudin        chitimi             1          2       1      50    100    Bonjour Madame
            2          2         1  réf 2 de Volfoni    quebecois           1          2       1      50    100    Bonjour Madame
            1          2         1  réf 2 Naudin        chitimi             1          2       2      50    200    Bonsoir Monsieur
            2          2         1  réf 2 de Volfoni    quebecois           1          2       2      50    200    Bonsoir Monsieur
            1          1         1  réf 1 Naudin        provençal           2          1       3      10    500    Language
            2          1         1  réf 1 de Volfoni    javanais            2          1       3      10    500    Language
            3          1         2  réf 1 de Dubicobit  basque              2          1       3      10    500    Language
            1          1         1  réf 1 Naudin        provençal           2          1       2      10    400    Query
            2          1         1  réf 1 de Volfoni    javanais            2          1       2      10    400    Query
            3          1         2  réf 1 de Dubicobit  basque              2          1       2      10    400    Query
            1          1         1  réf 1 Naudin        provençal           2          1       1      10    300    Sorry
            2          1         1  réf 1 de Volfoni    javanais            2          1       1      10    300    Sorry
            3          1         2  réf 1 de Dubicobit  basque              2          1       1      10    300    Sorry
    
    Faites simple, mais pas plus simple ! (A. Einstein)
    E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    Je ne réponds pas aux questions techniques par MP. Les forums sont là pout ça.
    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench

  3. #83
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Effectivement, ma question était complètement stupide ... Heureusement, j'avais bien laissé le AND

    Pour le reste, si vous validez la bdd, je clôture

    Merci.
    Orygynz

  4. #84
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 6 981
    Points : 26 180
    Points
    26 180
    Billets dans le blog
    16
    Par défaut
    Bonjour Orygynz,


    Comme quoi rien de tel qu'un bon jeu d'essai, le plus complet possible, pour s'assurer qu'on ne code pas des requêtes donnant des résultats faux à partir de données valides...

    Vous pouvez clôre...

    Bonne route,

    François
    Faites simple, mais pas plus simple ! (A. Einstein)
    E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    Je ne réponds pas aux questions techniques par MP. Les forums sont là pout ça.
    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench

  5. #85
    Invité
    Invité(e)
    Par défaut
    C'est avec une petite larme que je clôture ce poste ! On aurait pu attendre de fêter nos 1 an sur ce post

    Sûrement soulagé de le fermer

    Merci (plus que) beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.
Page 5 sur 5 PremièrePremière 12345

Discussions similaires

  1. [AC-2013] Débutant-Validation modélisation BDD inventaire d'optique
    Par Femtozaza dans le forum Modélisation
    Réponses: 55
    Dernier message: 07/05/2015, 17h50
  2. validation diagramme de classe d'une clinique
    Par elqorchi-najoua dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 12/10/2010, 12h36
  3. Validation diagrammes : use case
    Par nizar_grindi dans le forum Cas d'utilisation
    Réponses: 1
    Dernier message: 30/03/2010, 23h36
  4. Question et validation diagramme simple (débutant)
    Par dorian53 dans le forum Cas d'utilisation
    Réponses: 2
    Dernier message: 24/03/2010, 10h54
  5. validation diagramme de classe
    Par kokumbo dans le forum Diagrammes de Classes
    Réponses: 13
    Dernier message: 11/10/2009, 23h39

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