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 :

[MCD] interrogation sur les relations


Sujet :

Schéma

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 154
    Points : 68
    Points
    68
    Par défaut [MCD] interrogation sur les relations
    Bonjour,

    Voila, pour ma petite application je réalise un MCD, et il y a une partie ou j'ai un doute , voici les regles de gestion :


    Un questionnaire comporte plusieurs question
    une question peut appartenir à plusieur questionnaire
    (association entre questionnaire et question)

    Et une réponse est lié à une question et un questionnaire


    Pour le moment j'ai rattaché la table reponse aux tables questionnaire et question. Mais ne devrais je pas la rattacher à mon association? ( aggregation)?

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et une réponse est lié à une question et un questionnaire
    Que recouvre la notion de "réponse" ?
    1) la réponse attendue à la question ?
    2) la réponse donnée par un répondant au questionnaire ?

    Si c'est la 1), en fait, la réponse est une donnée portée par l'association et non pas une entité.

    Si c'est la 2), c'est plus compliqué car il faut gérer les répondants et à quels questionnaires ils répondent.

    Dans les deux cas, comment gères-tu justement ces répondants par rapport aux questionnaires et aux questions ?
    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 !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 154
    Points : 68
    Points
    68
    Par défaut
    Salut

    merci pour l'interet que tu porte à mon problème.

    On ne gère pas le répondant car c'est tout le temps le même ( si tu veux le context générale, en fait je cré un questionnaire informatisé pour réaliser des audit , donc ce sont des questionnaire parfois répété , attribué à différent client et c'est l'auditeur qui saisie les réponses) mais ces réponses sont donc lié à une question et un questionnaire, (et un questionnaire est lié à un exercice, et un exercice à un client).

    Mais il y a beaucoup de couple : questionnaire/question qui n'ont pas forcément de réponse . Elle en auront plus tard.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tel que tu le décris, je vois la réponse comme un attribut de l'association entre questionnaire et question.
    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 !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 154
    Points : 68
    Points
    68
    Par défaut
    hm peut être que mes arguments ne valent pas un clou mais je les expose quand même ^^

    - il y a des instances de l'association questionnaire/question qui n'ont pas de réponse,
    (A un moment donné, je peux cré des nuplet à mon association sans qu'il y ait une seul réponse) donc ça voudrait dire que lorsqu'il y a une reponse je fais un update.(pk pas^^)

    et heu mon deuxième argument, c'est que une reponse c'est un champs texte et un champs objet, pour pouvoir inserer des pièces jointes ( genre un fichier pdf)

    du coup je me suis dit (peut être à tord) qu'il serait interessant de cré une table réponse

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le fichier pdf, s'il est unique, peut être un autre attribut de l'association.
    Bien sûr dans la table, tu stockera le chemin vers ce fichier et non pas le fichier lui-même !

    S'il y a plusieurs fichiers ou d'autres choses que tu ne nous dis pas, tu peux aussi faire une entité Réponse et l'association devient ternaire.
    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 du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 154
    Points : 68
    Points
    68
    Par défaut
    arf dsl, je pensais que le simple fait qu'une question n'ai forcement une réponse dans un temps donné, suffisait à forcer la création d'une table réponse, par contre , en quoi est-ce plus intéressant de faire une ternaire plutot que d'ajouter les clef etrangère ( question et questionnaire ) à la table reponse? est-ce du a la transitivité et la redondance?

  8. #8
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour,

    D'après ce que j'ai lu :
    - un questionnaire est unique car lié à un exercice et un client
    - le couple questionnaire/question a 0 ou 1 réponse
    - une réponse ne concerne qu'un et un seul couple questionnaire/question

    Il y a plusieurs possibilités pour modéliser ces règles.

    1) Les propriétés texte_réponse et objet_réponse peuvent se situer dans l'association entre questionnaire et question à condition d'accepter la présence de valeurs NULL dans cette association pour ces deux propriétés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     [ QUESTIONNAIRE ]
             |
            1,n
             |
             |
      ( association )
      (-------------)
      (texte_réponse)
      (objet_réponse)
             |
             |
            0,n
             |
       [ QUESTION ]

    2) Introduire une entité Réponse contenant texte_réponse et objet_réponse. Une réponse est liée à un seul couple questionnaire/question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     [ QUESTIONNAIRE ]
             |
            1,n
             |
             |
      ( association )<-0,1----( )----1,1--[ REPONSE ]
             |
             |
            0,n
             |
       [ QUESTION ]
    La table issue de REPONSE contiendra les clés étrangères questionnaire et question. Mais, ici encore, il faut accepter que certaines valeurs de texte_réponse et objet_réponse soient à NULL car la réponse est soit un texte soit un fichier.

    2.1) La modélisation ci-dessus est différente de celle qui consiste à dire que REPONSE est liée à un seul questionnaire, d'une part, et une seule question, d'autre part, car dans ce cas, le modèle résultant serait le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     [ QUESTIONNAIRE ]<-0,n----( )
             |                  |
            1,n                1,1
             |                  |
             |                  |
      ( association )      [ REPONSE ]
             |                  |
             |                  |
            0,n                1,1
             |                  |
       [ QUESTION ]<-0,n-------( )
    prenant le risque de lier une réponse à un couple questionnaire / question absent de l'association.


    3) Spécialiser l'entité REPONSE en REPONSE_TEXTE et REPONSE_OBJET contenant respectivement texte_réponse et objet_réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     [ QUESTIONNAIRE ]
             |
            1,n
             |
             |                                       <===[ REPONSE_TEXTE ]
      ( association )<-0,1----( )----1,1--[ REPONSE ]
             |                                       <===[ REPONSE_OBJET ]
             |
            0,n
             |
       [ QUESTION ]
    Avec ce modèle, aucune des deux propriétés n'est à NULL. On pourra optimiser le niveau logique (MLD) en ne générant pas la table correspondant à l'entité générique REPONSE mais seulement celles issues des entités spécialisées REPONSE_TEXTE et REPONSE_OBJET. Chacune des deux tables contient un couple de clés étrangères questionnaire / question "pointant" vers une occurrence existante de association.


    Ce dernier modèle est celui répondant à toutes les contraintes et évitant la présence de NULL.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 154
    Points : 68
    Points
    68
    Par défaut
    Super merci beaucoup pour les explication détaillé !

    Hm désolé de revenir sur ce point, mais dans le dernier schéma que vous proposez, ( celui où il y a de l'heritage) heritage sur reponse, avec reponse_objet et reponse_texte, je comprend qu'a ce moment on n'a plus besoin de gèrer que l'un des 2 puisse être nul, mais je ne comprend pas comment est-ce que l'on peut avoir une réponse avec à la fois un objet et un texte.
    Si vous pouviez m'eclaircir

  10. #10
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour,

    Citation Envoyé par jonathanC Voir le message
    dans le dernier schéma que vous proposez [...] je comprend qu'a ce moment on n'a plus besoin de gèrer que l'un des 2 puisse être nul
    Exact


    Citation Envoyé par jonathanC Voir le message
    mais je ne comprend pas comment est-ce que l'on peut avoir une réponse avec à la fois un objet et un texte.
    Donc si je résume, on peut avoir 4 cas :
    1. une réponse sous forme de texte
    2. une réponse sous forme d'objet
    3. une réponse sous forme de texte et d'objet
    4. pas de réponse

    Voici comment se traduisent ces 4 cas dans le MLD au moyen d'un exemple dans lequel on considère la réponse à la question n°8 du questionnaire n°3 (les clés sont soulignées, les clés étrangères suffixées par #).


    Quel que soit le cas, la table issue de association aura toujours le même contenu. La voici. Par la suite, je ne la répèterai pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    table association
    -----------------
    Qaire   Qtion
    3       8

    J'ai dit aussi qu'une optimisation du MLD consiste à ne pas générer la table issue de l'entité REPONSE ; elle ne figure donc pas dans les différents cas de l'exemple ci-dessous.

    Cas 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    table REPONSE_TEXTE
    -------------------
    No_reponse   Texte_reponse         Qaire#   Qtion#
    57           Le colonel Moutarde   3        8
    
    
    table REPONSE_OBJET
    -------------------
    No_reponse   Objet_reponse         Qaire#   Qtion#
    XXXXXX pas de ligne avec Qaire=3 et Qtion=8 XXXXXX

    Cas 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    table REPONSE_TEXTE
    -------------------
    No_reponse   Texte_reponse         Qaire#   Qtion#
    XXXXXX pas de ligne avec Qaire=3 et Qtion=8 XXXXXX
    
    
    table REPONSE_OBJET
    -------------------
    No_reponse   Objet_reponse         Qaire#   Qtion#
    57           C:\Enquete\Cluedo...  3        8

    Cas 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    table REPONSE_TEXTE
    -------------------
    No_reponse   Texte_reponse         Qaire#   Qtion#
    57           Le colonel Moutarde   3        8
    
    
    table REPONSE_OBJET
    -------------------
    No_reponse   Objet_reponse         Qaire#   Qtion#
    57           C:\Enquete\Cluedo...  3        8

    Cas 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    table REPONSE_TEXTE
    -------------------
    No_reponse   Texte_reponse         Qaire#   Qtion#
    XXXXXX pas de ligne avec Qaire=3 et Qtion=8 XXXXXX
    
    
    table REPONSE_OBJET
    -------------------
    No_reponse   Objet_reponse         Qaire#   Qtion#
    XXXXXX pas de ligne avec Qaire=3 et Qtion=8 XXXXXX
    Le cas 3 répond plus particulièrement à ta question.


    Passons maintenant à une autre optimisation du modèle. En effet, on voit que le MLD est efficace lorsqu'on a une réponse et qu'on veut connaitre la question. On imagine assez facilement que les recherches courantes dans la base de données feront plutôt l'inverse : on voudra connaitre la réponse de chaque question d'une liste (probablement toutes celles d'un questionnaire).
    Dans ce cas la recherche sera moins efficace (même en posant un index [Qaire, Qtion] dans les tables REPONSE_XXX).

    La solution à ce problème est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     [ QUESTIONNAIRE ]
             |
            1,n
             |
             |                                         <===[ REPONSE_TEXTE ]
      ( association )<-0,1----( )----(1,1)--[ REPONSE ]
             |                                         <===[ REPONSE_OBJET ]
             |
            0,n
             |
       [ QUESTION ]
    Quelle différence par rapport au modèle précédent ? J'ai simplement mis la cardinalité 1,1 entre parenthèses. Dans la représentation PowerAMC (il existe d'autres représentations) cela signifie que REPONSE est identifiée par rapport à association : il s'agit d'une identification relative.

    Une autre différence, invisible sur ce schéma, est que REPONSE ne comporte pas d'identifiant propre. Si bien que l'identifiant de REPONSE et, par le mécanisme d'héritage, celui de REPONSE_TEXTE et REPONSE_OBJET, est le même que celui d'association, à savoir le couple (Qaire, Qion). La table issue de REPONSE_TEXTE, par exemple, se présente maintenant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    table REPONSE_TEXTE
    -------------------
    Qaire#   Qtion#   Texte_reponse   
    3        8        Le colonel Moutarde
    La clé de REPONSE_TEXTE (et celle de REPONSE_OBJET) est la même que celle d'association. Ceci optimisera les jointures (mais je ne peux pas dire dans quelle proportion).
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2008, 01h19
  2. Réponses: 2
    Dernier message: 08/01/2008, 05h56
  3. Interrogation sur les frames d'animation
    Par franc82 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 23/11/2006, 18h40
  4. Petite interrogation sur les z-index et div
    Par Delphy113 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/02/2006, 21h09

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