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] Modéliser un questionnaire


Sujet :

Schéma

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut [MCD] Modéliser un questionnaire
    Bonjour,

    Après de saines lectures (cf tutos), j'essaie de démarrer la conception d'une mini base pour commencer. Et dèjà les difficultés arrivent...

    Base fun pour interrogation:
    On a des questions auxquelles correspondent des réponses et des exemples. Chaque question appartient à une catégorie de questions.
    On pose des questions à un utilisateur qui y répond (vrai/faux)

    - une table users(id, nom)
    - une table questions(id, question, answer, example)
    - une table category(id, categ_name)

    - Association "Poser":
    users --1,n--> POSER <--1,n-- questions:

    - Association "Correspond":
    category -- 1,n--> CORRESPOND <--1,1-- questions

    Je souhaite conserver dans la base les informations suivantes:
    - le nombre de fois où une question a été posée à un user,
    - le scores des users ie. le nombre de bonnes (ou mauvaises) réponses de ce user pour cette question.

    Ma question: comment faire cela ? Ce que j'ai du mal à faire, c'est le lien entre les tables users, questions et scores puisque je pense qu'il faudra bien avoir une table scores... Non ?
    J'aurai tendance à ajouter une table scores(id, #user_id, #quest_id)
    du fait de l'association "Obtenir":

    users ---1,n--> Obtenir <--1,1 questions
    î
    1,1
    |
    scores

    J'ai tout faux ?

    Merci d'avance de m'aider un peu (la conception de bases, c'est un métier). Désolé pour la forme, mais je ferai des dessins la prochaine fois

    Dominique

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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut associations porteuses
    Une association-type de type plusieurs à plusieurs peut être porteuse de propriétés :

    L'association-type Poser est toute indiquée pour être porteuse de la propriété NB (nombre de fois où la question q a été posée à l'utilisateur u).
    Même principe pour la propriété NB_OK (nombre de fois où l'utilisateur u a répondu de façon satisfaisante à la question q).

    Au niveau logique, ceci se traduira par une table POSER (clé primaire soulignée) :
    POSER (#user_id, #quest_id, NB, NB_OK)
    En outre, {#user_id} est clé étrangère et référence la table Users, de même {#quest_id} est clé étrangère et référence la table Questions.
    (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. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut
    Merci beaucoup fsmrel pour ton aide efficace.

    Je joins le MCD et le MLD.

    J'ai rajouté un champ "importance" (dans la table "poser") permettant à l'utilisateur de choisir le degré d'importance de la question (réponse à connaître absolument, ou pas), variant par exemple de 0 à 10.
    Ne serait-il pas plus judicieux d'avoir une autre table permettant à chaque utilisateur de choisir cette "importance" pour chaque question, quitte à en mettre une par défaut ?

    En tout état de cause, merci beaucoup

    Dominique
    Images attachées Images attachées   

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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour Bestdomdom,


    Citation Envoyé par bestdomdom Voir le message
    J'ai rajouté un champ "importance" (dans la table "poser") permettant à l'utilisateur de choisir le degré d'importance de la question (réponse à connaître absolument, ou pas), variant par exemple de 0 à 10.
    Ne serait-il pas plus judicieux d'avoir une autre table permettant à chaque utilisateur de choisir cette "importance" pour chaque question, quitte à en mettre une par défaut ?
    Je n’ai pas bien compris ce que vous recherchez. Voulez-vous dire que chaque utilisateur affecte lui-même une valeur au degré d'importance de chaque question à laquelle il a choisi de répondre ?


    En attendant, voici quelques remarques concernant votre MCD :

    Vous avez établi une cardinalité 1,N pour la patte connectant l’entité-type Questions et l’association-type Correspond : vous signifiez ainsi qu’une question correspond à une ou plusieurs catégories. Si une question ne correspond qu'à une catégorie (cf. votre 1er message), la cardinalité doit être 1,1.

    Je vous suggère de prendre l’habitude de mettre les noms des entités-types au singulier : une entité-type est l’abstraction d’entités singulières, on peut la considérer comme une classe. On peut dire encore que, si une entité (c'est-à-dire une instance, une occurrence) correspond à une proposition en logique (par exemple, "Bestdomdom participe au forum Conception depuis juin 2005"), l’entité-type correspond à son tour à un prédicat. Exemple du prédicat FORUMEUR : Le forumeur NOM_FORUMEUR participe au forum NOM_FORUM depuis la date DATE_D_INSCRIPTION.
    (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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut
    Bonjour fsmrel,

    Merci de m'aider à mieux comprendre...

    La base contient des questions et pour chacune d'elles une réponse et un exemple.

    Une même question peut appartenir à plusieurs catégories, d'où la relation 1,n entre l'entité Question et l'association Correspond.

    Un degré d'importance 'degre' est affecté à chaque question pour/par chaque utilisateur.
    Une même question posée à un même utilisateur a un et un seul degré d'importance 'degre'. Une valeur par défaut est donnée à ce paramètre. Ce paramètre peut être modifié.

    J'ai refait le MCD et le MLD, ci-joints.
    Du coup, j'ai une association Répondre qui contient les réponses et une association Poser qui contient notamment le paramètre 'degre'.

    Lorsque je crée mes tables, je considère que u_id et q_id sont des clés primaires (et étrangères) de la table Répondre:
    Repondre (#u_id, #q_id, degre)
    Pouvez-vous me confirmer que c'est suffisant pour garantir que, dans la table Répondre, à chaque couple utilisateur-question (u_id, q_id) ne puisse correspondre qu'un et un seul 'degre' ?
    Exemple:
    u_id=1 q_id=1 degre=5
    u_id=1 q_id=1 degre=7 Impossible car couple (u_id,q_id) existe déjà
    u_id=1 q_id=2 degre=7 Possible car couple (u_id,q_id) n'existe pas


    Merci d'aider les novices
    Dominique
    Images attachées Images attachées   

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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour bestdomdom,


    Citation Envoyé par bestdomdom Voir le message
    Lorsque je crée mes tables, je considère que u_id et q_id sont des clés primaires (et étrangères) de la table Répondre:
    Repondre (#u_id, #q_id, degre)
    Pouvez-vous me confirmer que c'est suffisant pour garantir que, dans la table Répondre, à chaque couple utilisateur-question (u_id, q_id) ne puisse correspondre qu'un et un seul 'degre' ?
    Exemple:
    u_id=1 q_id=1 degre=5
    u_id=1 q_id=1 degre=7 Impossible car couple (u_id,q_id) existe déjà
    u_id=1 q_id=2 degre=7 Possible car couple (u_id,q_id) n'existe pas
    Je réponds plus loin.


    Au préalable, je voudrais m'assurer que nous sommes sur la même longueur d'onde. Pour des raisons de commodité, je vais reprendre votre sujet au niveau purement logique. Considérons donc les relations entre un utilisateur et une question, traduites sous forme de tables.

    La table POSER a la structure suivante (j’ai ôté les "#" qui posent souvent un problème avec la version française des SGBD) :
    POSER {U_id, Q_id, Degre}
    Dont le prédicat est le suivant :
    A l’utilisateur U_id est posée la question Q_id, selon le degré Degre.
    Et la table REPONDRE :
    REPONDRE {U_id, Q_id, Nb, NbOk}
    Dont le prédicat est le suivant :
    A la question Q_id, l’utilisateur U_id a répondu Nb fois, dont NbOk fois de façon correcte.

    On peut se poser la question suivante : pourquoi des deux tables de pas en faire qu’une ? (Exercice : rédigez-en le prédicat)
    QR {U_id, Q_id, Degre, Nb, NbOk}
    En effet, du point de vue de la théorie relationnelle, QR représente la jointure naturelle de POSER et de REPONDRE et peut à son tour être décomposée sans perte en POSER et REPONDRE, par application du théorème de Heath (Cf. la fin de ce message).
    Mais, il ne faut pas oublier de tenir compte de NULL qui peut nous empoisonner la vie. Voyez par exemple Le bonhomme NULL.
    Supposons que tous les attributs de la table QR soient nécessairement valorisés au cours de la même transaction (même COMMIT/ROLLBACK), NULL étant interdit, autrement dit si l’instruction CREATE TABLE est ainsi rédigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE QR (
        U_id      Integer    NOT NULL
      , Q_id      Integer    NOT NULL
      , Degre     Integer    NOT NULL
      , Nb        Integer    NOT NULL
      , NbOk      Integer    NOT NULL
      , Primary Key (U_id, Q_id)
      , Foreign Key (U_id) References USER
      , Foreign Key (Q_id) References QUESTION) ;
    Alors la table QR est tout à fait acceptable.

    Supposons que les attributs de la table QR ne soient pas tous valorisés au cours de la même transaction, cas par exemple des attributs Nb et NbOk qui seraient valorisés postérieurement à l'attribut Degre. La table QR est toujours correcte si vous utilisez des valeurs par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE QR (
        U_id      Integer    NOT NULL
      , Q_id      Integer    NOT NULL
      , Degre     Integer    NOT NULL
      , Nb        Integer    NOT NULL   DEFAULT 0
      , NbOk      Integer    NOT NULL   DEFAULT 0
      , Primary Key (U_id, Q_id)
      , Foreign Key (U_id) References USER
      , Foreign Key (Q_id) References QUESTION) ;
    Étant convenu que tant qu’un utilisateur n’a pas encore fourni de réponse, Nb et NbOk prendront par défaut la valeur 0.

    Maintenant, si vous voulez vous coller des problèmes sur le dos, autorisez le bonhomme NULL à se manifester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE QR (
        U_id      Integer    NOT NULL
      , Q_id      Integer    NOT NULL
      , Degre     Integer    NOT NULL
      , Nb        Integer    NULL   
      , NbOk      Integer    NULL    
      , Primary Key (U_id, Q_id)
      , Foreign Key (U_id) References USER
      , Foreign Key (Q_id) References QUESTION) ;
    Une autre façon de procéder, mais proprement, consiste à mettre en oeuvre deux tables, à savoir les tables POSER et REPONDRE mentionnées ci-dessus et issues des associations-types Poser et Repondre du MCD :
    POSER {U_id, Q_id, Degre}

    REPONDRE {U_id, Q_id, Nb, NbOk}
    En réponse à votre question initiale, le problème est que l’on peut tout à fait se retrouver avec des réponses à des questions non posées, il suffit que q1 et q2 existent dans la table QUESTION...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       POSER (U_id,   Q_id,   , Degre)
               u1      q1        d1
    
    REPONDRE (U_id,   Q_id,   , Nb,   NbOk)
               u1      q2       1      1
    Ce qui veut dire que pour éviter cela, il faut établir une contrainte d’inclusion entre les deux tables, ce qui en fait est facile à réaliser :
    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
    CREATE TABLE POSER (
        U_id      Integer    NOT NULL
      , Q_id      Integer    NOT NULL
      , Degre     Integer    NOT NULL
      , Primary Key (U_id, Q_id)
      , Foreign Key (U_id) References USER
      , Foreign Key (Q_id) References QUESTION) ;
     
    CREATE TABLE REPONDRE (
        U_id      Integer    NOT NULL
      , Q_id      Integer    NOT NULL
      , Nb        Integer    NOT NULL
      , NbOk      Integer    NOT NULL
      , Primary Key (U_id, Q_id)
      , Foreign Key U_id, Q_id) References POSER) ;
    C'est-à-dire en définissant une clé étrangère ad-hoc, entre POSER et REPONDRE, clé étrangère qui impose que chaque couple {U_id, Q_id} dans REPONDRE soit d'abord un couple {U_id, Q_id} dans POSER.



    Dans votre exemple, l’alternative consistant à mettre en œuvre, soit la seule table QR, soit le couple POSER, REPONDRE peut paraître futile, mais dans la réalité des grandes bases de données sur lesquelles sont connectés des centaines, voire des milliers d’utilisateurs, on y regarde à deux fois. Par exemple, si on extrapole en remplaçant USER par CLIENT, QUESTION par PRODUIT, POSER par COMMANDE et REPONDRE par FACTURE, on peut se poser le problème de l’encombrement des buffers (et autres caches) par des données inutiles, quand de FACTURE et COMMANDE on fait une seule table CDE_FACT : la partie (non encore connue) FACTURE encombre inutilement la mémoire quand on traite des commandes, on peut de poser le problème de l'inter-blocages des transactions, des droits des utilisateurs sur des tables distinctes ou non, etc.

    Mais, Sahib, ceci est une autre histoire.

    __________________________________

    NB. Théorème de Heath (1971) :
    Soit la variable relationnelle R (A, B, C) dans laquelle A, B et C sont des ensembles d’attributs de R.
    Si R satisfait à la dépendance fonctionnelle A → B, alors R est égale à la jointure de ses projections sur {A, B} et {A, C}.
    (Le terme "variable relationnelle" peut être traduit informellement par le terme "table").
    (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.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut
    Bonjour fsmrel,

    Merci beaucoup pour votre aide et pour avoir pris de votre temps pour m'expliquer.

    Votre 'cours' me permets de mieux comprendre avec des exemples concrets, en mettant l'accent sur certains risques ou problèmes (NULL...).
    Je vais essayer de m'amuser un peu avec ce petit modèle, en suivant vos bons conseils.

    J'ai modifié le modèle en le compliquant un peu en ajoutant une entité questionnaire à laquelle se rattachent les questions. Mais je ne parviens pas à le terminer.
    Voici les "prédicats":
    Des users répondent à un questionnaire chaque année.
    Le questionnaire est identique pour tous les users pour chaque année n.
    Chaque questionnaire comprend un certain nombre de questions.
    Une même question peut exister dans plusieurs questionnaires (ie question q se retrouve ou non dans le questionnaire qu1 ou qu2).
    Jusque-là, ça va.
    Un user fournit une réponse à chaque question (relative à un questionnaire)
    Je reste bloqué sur ce point.
    Comment relier les users aux réponses, sachant que celles-ci sont liées à des questions elles-même liées à un questionnaire ? Je butte sur le lien entre l'entité Questionnaire et l'association Répondre.
    Dans mon esprit, il faudrait avoir une table comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user_id            q_id       questio_id     reponse
    1                     1                 1               a
    1                     1                 2               b
    1                     2                 1               c
    1                     2                 3               d
    2                     1                 1               e
    Suffit_il d'ajouter un lien entre l'association Répondre et l'entité Questionnaire comme dans le graphique Questionnaire2 ?

    Je joins un MCD.

    Un grand merci
    Dominique
    Images attachées Images attachées   

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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour Dominique,


    Selon votre MCD, un utilisateur répond à une question sans faire intervenir le questionnaire concerné. L’association-type Répondre ne doit donc pas connecter User et Question, mais plutôt User et Correspondre. Je suppose que mettre en relation une entité-type et une association-type vous choquera, mais vous vous y ferez, il suffit de considérer Correspondre (que j’ai renommée en Questionnaire_Question) comme une entité-type associative. Il est temps aussi de quitter AnalyseSI, beaucoup trop limité et d’utiliser d’autres outils (gratuits) tels que Toad Data Modeler ou DBDesigner, qui sont plus orientés MLD que MCD, mais au moins avec lesquels on arrive à représenter les choses de façon tout à fait pertinente.

    Avec le MLD ci-dessous, on devrait commencer à y voir plus clair.





    "PK" est l’abréviation de Primary Key.
    "PFK" est l’abréviation de Primary [et simultanément] Foreign Key.
    La lecture des cardinalités ne devrait pas vous poser de problème.
    (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.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut
    Re-Bonjour et encore merci pour votre aide et votre patience. J'apprécie.

    Citation Envoyé par fsmrel Voir le message
    Selon votre MCD, un utilisateur répond à une question sans faire intervenir le questionnaire concerné. L’association-type Répondre ne doit donc pas connecter User et Question, mais plutôt User et Correspondre.
    Dans mon esprit, un questionnaire doit être créé, qui va comprendre q questions (devant elles-même être créées).
    Puis un "user" va:
    - choisir un questionnaire, qui comprend donc q questions,
    - y répondre.
    Le point sur lequel je m'interroge est:
    un utilisateur répond à une question sans faire intervenir le questionnaire concerné
    En fait si (dans mon esprit), puisque l'utilisateur choisit le questionnaire et que les questions dépendent du questionnaire choisi. Ainsi, les réponses de l'utilisateur dépendent du questionnaire choisi.
    Je me demande si votre MCD prend cette hypothèse en compte. Je n'en ai pas l'impression. Est-ce que je me trompe ?
    Ne faut-il pas rétablir l'association Interroger de mon MCD (entre User et Questionnaire) ?
    D'un autre côté, je n'en suis pas si sûr ... car l'utilisateur répond non pas au questionnaire mais aux questions relatives au questionnaire; ce que vous avez formulé différemment.
    Faut-il ou non cette association Interroger entre User et Questionnaire ?

    Je suppose que mettre en relation une entité-type et une association-type vous choquera, mais vous vous y ferez, il suffit de considérer Correspondre (que j’ai renommée en Questionnaire_Question) comme une entité-type associative.
    Je pense que vous voulez dire 'mettre en relation deux associations-type'.
    Non ?
    En fait, je voulais mettre en relation mon association Répondre avec l'association Correspondre (que vous avez renommée Questionnaire_Question) mais je n'y parvenais pas avec AnalyseSI. Du coup, je me suis dit que je devais me tromper et qu'il devait s'agir d'une hérésie méthodologique....

    Avec le MLD ci-dessous, on devrait commencer à y voir plus clair.
    Effectivement !
    La lecture des cardinalités ne devrait pas vous poser de problème.
    Je ne connaissais pas ces symboles mais maintenant c'est fait... Font-ils partie d'une méthodologie différente de Merise (la seule que je connaisse) ?


    Merci de votre aide
    Dominique

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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir Dominique,


    Citation Envoyé par bestdomdom Voir le message
    puisque l'utilisateur choisit le questionnaire et que les questions dépendent du questionnaire choisi. Ainsi, les réponses de l'utilisateur dépendent du questionnaire choisi.
    Je me demande si votre MCD prend cette hypothèse en compte. Je n'en ai pas l'impression. Est-ce que je me trompe ?
    Vous observerez que dans la représentation graphique que je vous ai fournie, la clé de Reponse est {questionnaire_id, question_id, user_id}, c'est-à-dire qu’on a la dépendance fonctionnelle :
    {questionnaire_id, question_id, user_id} → {r_reponse}.
    Dit autrement, une réponse implique bien un utilisateur et une question d’un questionnaire, ce qui correspond précisément à votre représentation tabulaire (en conservant votre ordre des attributs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user_id    questionnaire_id    question_id     r_reponse
       1             1                 1               a
       1             1                 2               b
       1             2                 1               c
       1             2                 3               d
       2             1                 1               e


    Ne faut-il pas rétablir l'association Interroger de mon MCD (entre User et Questionnaire) ?
    D'un autre côté, je n'en suis pas si sûr ... car l'utilisateur répond non pas au questionnaire mais aux questions relatives au questionnaire; ce que vous avez formulé différemment.
    Faut-il ou non cette association Interroger entre User et Questionnaire ?
    Si vous préférez vous placer dans une logique Commande/Facture, c'est-à-dire ne pas vouloir attendre une première réponse de l’utilisateur pour connaître le questionnaire qu’il a choisi, vous pouvez représenter ainsi les choses (j’ai remplacé, "Interroger", par "ChoixUser", mais peu importe...) :




    A vous de choisir entre les deux représentations.

    Je vous prie de noter que dans Reponse, l’attribut questionnaire_id fait bien sûr partie de la clé primaire, mais il participe aussi à deux clés étrangères, référençant respectivement ChoixUser et Questionnaire_Question. L’outil de modélisation a en réalité créé deux attributs questionnaire_id, mais comme dans notre cas ils font double emploi, j’ai donc gommé l’attribut redondant.


    Je pense que vous voulez dire 'mettre en relation deux associations-type'.
    Non ?
    Non. J’ai mis en relation User (entité-type) et Correspondre (association-type) que j’ai renommée Questionnaire_Question et que je qualifie d’entité-type associative. D’aucuns parlent alors d’un mécanisme d’agrégation (voir la FAQ Merise).



    Je ne connaissais pas ces symboles mais maintenant c'est fait... Font-ils partie d'une méthodologie différente de Merise (la seule que je connaisse) ?
    Il y a plein de façons de représenter les cardinalités... Il s’agit ici d’une variante anglo-saxonne, que l’on retrouve par exemple dans Power AMC, dans IEF (James Martin), j’en passe et des meilleures.
    (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.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut
    Fsmrel,

    Bonjour et merci infiniment de votre aide et de vos explications claires.

    Je vais prendre un peu de temps pour m'exercer avec ces petits modèles et créer des requêtes. Là aussi, j'ai beaucoup à apprendre.
    Encore merci d'avoir consacré du temps à un amateur débutant. Dans un monde de plus en plus individualiste, il est réconfortant de constater qu'il existe des gens qui aident les autres sans attendre en retour... Valable pour tous ceux qui interviennent sur Développez et ailleurs.

    Je reviendrai avec sans doute d'autres questions basiques !!!
    Merci

    Dominique

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

Discussions similaires

  1. [MCD]Modéliser 1 filmothèque
    Par CptPingu dans le forum Schéma
    Réponses: 5
    Dernier message: 15/03/2007, 21h43
  2. [MCD] Modéliser 1 entité singleton ?
    Par kawther dans le forum Schéma
    Réponses: 3
    Dernier message: 11/03/2007, 22h35
  3. [MCD] Modéliser 1 plate-forme de reclassement
    Par puppusse79 dans le forum Schéma
    Réponses: 2
    Dernier message: 08/03/2007, 11h55
  4. [MCD]Modéliser 1 application de gestion de courses
    Par TallyHo dans le forum Schéma
    Réponses: 19
    Dernier message: 19/02/2007, 12h20
  5. [MCD]Modéliser 1 appli. multilingue
    Par blairswish dans le forum Schéma
    Réponses: 1
    Dernier message: 13/11/2006, 16h36

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