Pregunta

Estoy implementando un sistema de concurso en el que el usuario tiene que elegir la respuesta correcta de varias preguntas. Cada semana, hay un nuevo conjunto de preguntas. Estoy tratando de encontrar la manera correcta de almacenar las participaciones de los usuarios en una base de datos. Ahora mismo tengo el siguiente modelo de datos:

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

La única solución que se me ocurrió es agregar una tabla de respuestas que asocie una participación con una pregunta, como se indica en el siguiente diagrama:

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

No vinculo esta solución es muy buena, porque permite que una participación tenga respuestas a preguntas de una semana diferente. Agregar el WeekId a la respuesta no ayuda.

¿Cuál es la forma correcta de representar esta información?

¿Fue útil?

Solución

Puede eliminar el campo Id en la tabla Participación y usar (UserId, WeekId) como clave principal compuesta / concatenada para la tabla Participación. El campo ParticipationId en la tabla Respuesta que debe reemplazar luego por el par (UserId, WeekId) como referencia de clave externa a la tabla Participación. Si su sistema de base de datos lo permite, puede definir los campos (QuestionId, WeekId) en la tabla Respuesta a referencia (Id, WeekId) en la tabla Pregunta. Tal vez para esto tenga que definir un índice en el par (Id, WeekId) en la tabla Pregunta anterior.

Otros consejos

¿Realmente necesitas asociar una participación con su semana? Puedes conseguirlo a través de la pregunta

Entonces:

  • Respuesta (Id, UserId, QuestionId, Value)
  • Pregunta (Id, WeekId, Text)
  • Semana (Id, StartDate)

Personalmente creo que tienes la implementación adecuada aquí.

ParticipationId enlaza a la ID en la participación, que está relacionada con el usuario y la semana. Su tabla de preguntas está codificada con el WeekId también.

Por lo tanto, tienes las referencias adecuadas todo el tiempo. Si este no es el caso, creo que tendremos que ver algunos datos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top