Question

J'implémente un système de concours dans lequel l'utilisateur doit choisir la bonne réponse à plusieurs questions. Chaque semaine, il y a une nouvelle série de questions. J'essaie de trouver le bon moyen de stocker les participations des utilisateurs dans une base de données. À l'heure actuelle, j'ai le modèle de données suivant:

 Participation                     Week
+--------------+                  +--------------+
| Id           |     +----------->| Id           |<-+
| UserId       |     |            | StartDate    |  |
| WeekId       |-----+            +--------------+  |
+--------------+                                    |
                                   Question         |
                                  +--------------+  |
                                  | Id           |  |
                                  | WeekId       |--+
                                  | Text         |
                                  +--------------+

La seule solution que j'ai proposée consiste à ajouter un tableau de réponses associant une participation à une question, comme indiqué dans le diagramme suivant:

    Participation                     Week
   +--------------+                  +--------------+
+->| Id           |     +----------->| Id           |<-+
|  | UserId       |     |            | StartDate    |  |
|  | WeekId       |-----+            +--------------+  |
|  +--------------+                                    |
|                                     Question         |
|       Answer                       +--------------+  |
|      +------------------+    +---->| Id           |  |
+------| ParticipationId  |    |     | WeekId       |--+
       | QuestionId       |----+     | Text         |
       | Value            |          +--------------+
       +------------------+

Je ne lie pas cette solution, c’est très bien, car elle permet à une participation d’avoir des réponses aux questions d’une semaine différente. Ajouter le WeekId à la réponse n'aide pas.

Quelle est la bonne façon de représenter cette information?

Était-ce utile?

La solution

Vous pouvez supprimer le champ Id de la table Participation et utiliser (UserId, WeekId) comme clé primaire composée / concaténée pour la table Participation. Le champ ParticipationId dans la table Réponse, vous devez ensuite remplacer par la paire (UserId, WeekId) en tant que référence de clé étrangère à la table Participation. Si votre système de base de données le permet, vous pouvez définir ensuite les champs (QuestionId, WeekId) de la table Answer to reference (Id, WeekId) de la table Question. Pour cela, vous devez peut-être définir un index sur la paire (Id, WeekId) dans la table Question avant.

Autres conseils

Avez-vous vraiment besoin d’associer une participation à sa semaine? Vous pouvez l'obtenir via Question

Donc:

  • Réponse (Id, UserId, QuestionId, Value)
  • Question (Id, WeekId, Text)
  • Semaine (Id, StartDate)

Personnellement, je pense que vous avez la bonne implémentation ici.

ParticipationId renvoie à l'ID de la participation, qui est associé à l'utilisateur et à la semaine. Votre table de questions est également associée au WeekId.

Par conséquent, vous avez toujours les références appropriées. Si ce n’est pas le cas, je pense que nous aurons besoin de voir certaines données

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top