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

Discussion: Erreur de requête

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 54
    Points : 15
    Points
    15

    Par défaut Erreur de requête

    Bonjour.
    Besoin de votre aide: J'ai 4 tables "Formateur", "Formation", "Logiciel" et "Candidat" avec les règles de gestion suivantes:

    R1 - Un formateur fait 1,n Formation et une formation est faite par 1,n Formateur.
    R2 - Un formateur forme sur 1,n Logiciel et un Logiciel est utilisé par 0,n Formateur.
    R3 - Une formation est faite avec 1,n Logiciel et un logiciel assure 1,n Formation.
    R4 - Un Candidat s'inscrit pour (1,1) ou (1,n) Formation; A une formation peuvent s'inscrire 1,n Candidat. (Besoin du bon choix pour les cardinalités de Candidat vers Formation)
    R5 - Un Candidat fait 1,1 ou (1,n) Formation; Une formation peut être faite par 1,n Candidat. (Besoin aussi du bon choix pour les cardinalités de Candidat vers Faire)

    NB: La table Candidat est reliée à la table Formation puis reliée aussi à la table intermédiaire "Faire"

    Voici le MLD qui en découle:

    Formateur(idFormateur, nom, prenom, datenais, lieunais...);
    Formation(idF,libelle, outil, lieuF, dureeF, datePrevue);
    Candidat(idC, nomC, prenomC, datenaisC, lieunaisC...);
    Logiciel(idlog, nomlog, role)
    Faire(idFaire, idFormateur#, idF, idC#, idlog#, date_effective(jour, mois, annee, heuredebut, heurefin))

    1) Est-ce que ce MLD est juste? Si non, merci de le mettre en ordre en fonction des rêgles de gestion (Si possible le MCD aussi) car je vois bien toutes les possibilités mais
    j'ai bésoin d'un bon avis d'expert.

    2) Si ce MLD établi est juste, c'est à dire si je considère la règle de gestion R4 et R5 en utilisat (1,n) comme cardinalité de Candidat vers Formation et (1,n) de Candidat vers "Faire" et que je prends seulement idFaire comme seul identifiant de la table intermédiaire "Faire" entre les 4 tables et en prenant les (idF, idFormateur, idC, idlog) des autres tables seulement comme clés étrangères et non
    pas comme des clés primaires. Cela veut dire que tout est bon.
    Comme je l'ai fait, est-ce qu'il est normal que je donne une clé primaire (idFaire) appart à la table intermédiaire "Faire" et ne pas prendre les clés étrangères des autres tables comme clés primaires aussi? Si oui, alors dans ce cas voici les requêtes que je sollicite:

    a- La liste des formateurs qui forment sur un logiciel "lambda".
    b- La liste des Candidats ayant fait une formation "Lambda" donnée.
    c- Connaître le formateur intervenu pour la formation "lamba" à une date "lambda".
    d - La liste des formations faites avec le logiciel "lamba".
    e - La liste de toutes les formations faites par un formateur "lambda"

    Merci de votre aide.

  2. #2
    Membre à l'essai Avatar de tagada37
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2007
    Messages : 17
    Points : 15
    Points
    15

    Par défaut

    j'essaye de te répondre, en espérant avoir compris que tu sollicites d'abord un avis sur ton MCD/MLD...

    ton schéma tel qu'il est décrit est de type Etoile, avec des tables de dimensions et une table de fait au centre (la table Faire).
    pourquoi pas. mais c'est plutôt réservé aux entrepôts de données (volumineux) qui demandent des calculs sur les mesures de faits rapides (à des fins de statistiques et autres). hors je ne vois qu'une seul mesure, la date..
    je ne sais pas la finalité de ta base, mais ce type de schéma n'est pas simple à utiliser dans les interfaces ensuite, les règles de gestion d'insertion/suppression, etc. sont plus difficiles qu'avec une base relationnel classique.
    Ce n'est pas donc vers ce type de schéma que je me serais orienté, mais un schéma relationnel de forme normal (Merise).
    comme c'est indiqué dans ce tuto , tes tables demandent quasi toutes des tables intermédiaires (dites table de jointure) pour stocker les relations 1-n et n-1. voir le chap 5.1.3
    https://sqlpro.developpez.com/cours/.../?page=passage

    stef

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 54
    Points : 15
    Points
    15

    Par défaut

    Citation Envoyé par tagada37 Voir le message
    j'essaye de te répondre, en espérant avoir compris que tu sollicites d'abord un avis sur ton MCD/MLD...
    Ce n'est pas donc vers ce type de schéma que je me serais orienté, mais un schéma relationnel de forme normal (Merise).
    Merci bien pour le lien Tagada37. Je l'ai lu et je vois que j'ai respecté ce que sqlpro a dit sur les relations à cardinalités n:m, sauf que j'ai créé une clé primaire appart pour les tables de jointure "faire" et "inscrire". J'ai fait cela parce que lorsque j'essayais de faire un deuxième enregistrement après le premier du couple(formation- formateur- logiciel- candidat) j'avais une erreur de violation de contrainte bloquant le 2e enregistrement. Alors qu'il est normal qu'un formateur fasse plusieurs formations sur un ou plusieurs logiciel à une date donnée. Comme je n'arrivais pas à faire cet 2e enregistrement, alors j'ai préféré créé une clé primaire appart et j'ai pris les autres clés des autres tables, seulement comme clés étrangères ne faisant pas parti des clés primaires.
    Si cela est possible alors merci de m'aider pour les requêtes que je sollicite.

    Si cela n'est pas possible, alors merci de me montrer la manière dont vous alliez procéder.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 54
    Points : 15
    Points
    15

    Par défaut

    Est-ce qu'on peut m'aider?

  5. #5
    Membre à l'essai Avatar de tagada37
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2007
    Messages : 17
    Points : 15
    Points
    15

    Par défaut

    je te fais les 2 premières requêtes, et tu me dis si ça te conviens..

    a- La liste des formateurs qui forment sur un logiciel "lambda" :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT formateur.Nom, formateur.Prenom, Logiciel.nomlog
    FROM FORMATEUR , LOGICIEL, FAIRE
    WHERE Faire.idFormateur = Formateur.idFormateur
       AND  Faire.idlog = Logiciel.idlog
       AND Logiciel.nomlog like 'LAMBDA'
    GROUP BY formateur.Nom, formateur.Prenom, Logiciel.nomlog

    b- La liste des Candidats ayant fait une formation "Lambda" donnée.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT candidat.nomC, candidat.prenomC, formation.Libelle 
    FROM CANDIDAT, FORMATION, FAIRE
    WHERE Faire.idc = candidat.idC
       AND  Faire.idF = Formation.idF
       AND formation.Libelle  like 'LAMBDA'
    GROUP BY candidat.nomC, candidat.prenomC, formation.Libelle

  6. #6
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    15 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 15 958
    Points : 31 624
    Points
    31 624
    Billets dans le blog
    5

    Par défaut

    Voici le MLD qui en découle:
    Vous avez oublié l'étape MCD !

    R1 - Un formateur fait 1,n Formation et une formation est faite par 1,n Formateur.
    Formateur -1,n----faire----1,n- Formation

    R2 - Un formateur forme sur 1,n Logiciel et un Logiciel est utilisé par 0,n Formateur.
    Logiciel -0,n----utiliser----1,n- Formateur -1,n----faire----1,n- Formation

    R3 - Une formation est faite avec 1,n Logiciel et un logiciel assure 1,n Formation.
    Logiciel -0,n----utiliser----1,n- Formateur -1,n----faire----1,n- Formation
    |------------1,n----------------assurer-------------------------------------1,n-----|

    Remarque : Ne faut-il pas que le logiciel qui assure la formation (bizarre comme terme ! ) fasse partie de ceux que les formateurs utilisent ?
    => Contrainte à prévoir plus tard.

    R4 - Un Candidat s'inscrit pour (1,1) ou (1,n) Formation; A une formation peuvent s'inscrire 1,n Candidat.
    Logiciel -0,n----utiliser----1,n- Formateur -1,n----faire----1,n- Formation -1,n----inscrire----1,n- Candidat
    |------------1,n----------------assurer-------------------------------------1,n-----|

    (Besoin du bon choix pour les cardinalités de Candidat vers Formation)
    La modélisation est statique et doit prévoir le cas maximum. L'option de choisir une seule ou plusieurs formation relève du domaine applicatif.

    R5 - Un Candidat fait 1,1 ou (1,n) Formation; Une formation peut être faite par 1,n Candidat.
    Logiciel -0,n----utiliser----1,n- Formateur -1,n----faire----1,n- Formation -1,n----inscrire----1,n- Candidat
    |------------1,n----------------assurer--------------------------------1,n-------| |---------1,n----faire----1,n-----------|

    Remarque :
    Les candidats qui "font" les formations (j'aurais plutôt employé le verbe participer) ne doivent-ils pas faire partie de ceux qui se sont inscrits ?
    => Contrainte à prévoir

    Éventuellement, ne sont-ce pas les mêmes obligatoirement ?
    => Auquel cas une simple information de participation réelle dans l'association inscrire est suffisante ; pas besoin d'une association supplémentaire.


    Passons aux tables...
    te_formateur_frt (frt_id...)
    te_logiciel_log (log_id...)
    te_candidat_can (can_id...)
    te_formation_frm (frm_id...)
    tj_frm_assurer_log_fal (fal_id_formation, fal_id_logiciel...)
    tj_frt_faire_frm_fff (fff_id_formation, fff_id_formateur...)
    tj_can_inscrire_frm_cif (cif_id_candidat, cif_id_formation...)
    tj_can_faire_frm_cff (cff_id_candidat, cff_id_formation...)
    tj_frt_utiliser_log_ful (ful_id_formateur, ful_id_logiciel...)


    Vous voyez qu'il y a des différences avec votre modèle !

    Maintenant, si le terme "formation" est à comprendre dans le sens de "session de formation" (j'ai suivi une formation à PHP Objet à la session de juin, parmi d'autres sessions de la même formation), il faut probablement revoir vos règles de gestion qui sont incomplètes et, par voie de conséquence, le MCD puis les tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 54
    Points : 15
    Points
    15

    Par défaut

    Merci beaucoup tagada37,
    toutes les deux requêtes que vous avez élaborées marchent super bien.
    J'ai pu faire aussi pour :
    d - La liste des formations faites avec le logiciel "lamba".
    Vous pouvez la vérifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT libelle, outil, prix, lieuF, nomlog, jour, mois, annee
         FROM formation, logiciel, faire 
         WHERE formation.idF=faire.idF AND logiciel.idlog=faire.idlog
         AND logiciel.nomlog LIKE 'AGis 10.4';
    Mais je n'ai pas encore trouvé pour les autres requêtes. Grand merci à vous ...


    Cinephil, quant à vous aussi, je vous remercie. Cependant je vous reviens dans quelques instants pour puiser un peu votre idée.
    Grand merci à vous ...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mai 2016
    Messages : 54
    Points : 15
    Points
    15

    Par défaut

    Bonjour Cinephil,
    Citation Envoyé par CinePhil Voir le message
    Vous avez oublié l'étape MCD !
    Je vous donne le MCD du-dit projet:
    1)Premier MDC
    Nom : applicationFormation.jpg
Affichages : 12
Taille : 52,8 Ko

    1-a) Voici ses règles de gestion:

    R1 - Un formateur fait 0,n Formation et une formation est faite par 0,n Formateur.
    R2 - Un formateur forme sur 0,n Logiciel et un Logiciel est utilisé par 0,n Formateur.
    R3 - Une formation est faite avec 0,n Logiciel et un logiciel assure 0,n Formation.
    R4 - Un Candidat s'inscrit pour (1,n) Formation; A une formation peuvent s'inscrire 1,n Candidat.
    R5 - Un Candidat fait 0,n Formation; Une formation peut être faite par 0,n Candidat.

    1-b) Voici son MLD:

    Formateur(idFormateur, nom, prenom, datenais, lieunais...);
    Formation(idF,libelle, outil, lieuF, dureeF, datePrevue);
    Candidat(idC, nomC, prenomC, datenaisC, lieunaisC...);
    Logiciel(idlog, nomlog, role)
    Faire(idFaire, idFormateur#, idF, idC#, idlog#, date_effective(jour, mois, annee, heuredebut, heurefin))

    Veuillez le corriger si bésoin y est.

    2) Voici le second MCD:
    Nom : MCD appliformation1-1.jpg
Affichages : 12
Taille : 53,6 Ko
    2-a) Voici les règles de gestion du 2ème MCD:
    R1 - Un formateur fait 1,n Formation et une formation est faite par 1,n Formateur.
    R2 - Un formateur forme sur 1,n Logiciel et un Logiciel est utilisé par 1,n Formateur.
    R3 - Une formation est faite avec 1,n Logiciel et un logiciel assure 1,n Formation.
    R4 - Un Candidat s'inscrit pour (1,1) Formation à une date donnée; A une formation peuvent s'inscrire 1,n Candidat. Voici le ic...
    R5 - Un Candidat fait 0,1 Formation à une date donnée; Une formation peut être faite par 0,n Candidat à une date donnée. [date=(d-m-y) and (h-m-s)]

    Mon problème se situe toujours au niveau de R4 et R5 que je vous demande de m'éclaircir...
    Est-'il possible, sur le MCD, que Candidat soit relié directement à Formation puis à la relation FAIRE (pour dire qu'il s'inscrit et fait la formation)?

    Comment représenterais-je ce MLD à votre avis? Ou du moins aidez-moi à corriger le MCD s'il n'est pas cohérent.
    Grand merci pour la reflexion.

  9. #9
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    15 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 15 958
    Points : 31 624
    Points
    31 624
    Billets dans le blog
    5

    Par défaut

    1) Avez-vous essayé de faire le MCD comme je vous l'ai proposé ?

    2) À part ça, il y aura des choses à factoriser dans votre MCD. Vous voyez que vous avez pas mal de colonnes identiques dans Formateur et dans Candidat. Les formateurs et le candidats sont en effet des personnes physiques et il convient de faire un héritage.

    Règles de gestion :
    R1 : Un formateur est une personne et une personne peut-être un formateur.
    R2 : Un candidat est une personne et une personne peut-être un candidat.

    MCD :
    Formateur -(1,1)----être----0,1- Personne
    Candidat -(1,1)----être----0,1---------|

    3) Pourquoi avoir séparé jour, mois et année de naissance ?
    Une date de naissance de type DATE serait plus pratique.

    4) Au lieu de répéter X fois 'Ivoirien' dans la table des personnes, il est préférable d'externaliser la nationalité via une table des pays qui comprend une colonne de nationalité. Et dans la table des personnes, vous aurez yune clé étrangère référençant le pays de nationalité.

    Règle de gestion :
    R3 : Une personne est "nationalisée" par un pays et un pays peut "nationaliser" plusieurs personnes.

    MCD :
    Personne -1,1----nationaliser----0,n- Pays

    5) Idem pour les villes et les quartiers ; il vaut mieux les externaliser.

    Règles de gestion :
    R4 : Un quartier est situé dans une ville et une ville peut situer plusieurs quartiers
    R5 : Une personne habite dans un quartier un quartier peut voir habiter plusieurs personnes

    MCD :
    Personne -1,1----habiter----0,n- Quartier -1,1----situer----0,n- Ville

    6) Je suppose que le lieu de naissance est à nouveau une ville ?

    Règle de gestion :
    R6 : Une personne est née dans une ville et une ville peut voir naître plusieurs personnes

    MCD :
    Personne -1,1----naître----0,n- Ville

    7) 20 caractères pour un e-mail, ce n'est pas beaucoup !
    Et vu que les e-mails ne sont que rarement de la même taille, préférez le type caractère variable.

    On pourra d'ailleurs revoir en détail les types et longueurs de vos propriétés (futures colonnes de tables) parce qu'il y a des choses bizarres !

    8) C'est quoi "cell" qui justifie une telle longueur de chaîne de caractères ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre à l'essai Avatar de tagada37
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2007
    Messages : 17
    Points : 15
    Points
    15

    Par défaut

    avez vous besoin des requêtes C et E ?
    peut etre pouvez vous les faire en reprennant celles que j'ai faite.
    elles sont similaires.

Discussions similaires

  1. Erreur de requête
    Par Sebe dans le forum PHP & MySQL
    Réponses: 45
    Dernier message: 08/02/2006, 15h09
  2. [PHP MySQL] Erreur execution requête de type INSERT
    Par Pfeffer dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/01/2006, 18h38
  3. [Debutant]Erreur Récurent - Requête
    Par ghan77 dans le forum Bases de données
    Réponses: 19
    Dernier message: 10/01/2006, 14h09
  4. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 08h27
  5. Erreur de requête :-(
    Par pekka77 dans le forum ASP
    Réponses: 2
    Dernier message: 28/06/2005, 14h53

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