Pergunta

Estou implementando um sistema de concurso em que o usuário tem que escolher a resposta correta de questões de múltipla. A cada semana, há um novo conjunto de perguntas. Eu estou tentando encontrar a maneira correta de armazenar as participações de usuário em um banco de dados. Agora eu tenho o seguinte modelo de dados:

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

A única solução que eu vim com é adicionar uma tabela Resposta que associa uma participação com uma pergunta, como indicado no diagrama a seguir:

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

Eu não ligar esta solução é muito boa, porque permite a participação de ter respostas a perguntas de uma semana diferente. Adicionando o WeekId para a resposta não ajuda.

O que é a maneira correta para representar esta informação?

Foi útil?

Solução

Você pode remover o campo Id na Participação mesa, e uso (UserId, WeekId) como composto / chave primária concatenada para a Participação mesa. O ParticipationId campo na tabela Resposta você tem que substituir, em seguida, pelo par (UserId, WeekId) como referência de chave estrangeira para a Participação mesa. Se o seu sistema de banco de dados permite que ele, você pode definir, em seguida, os campos (QuestionID, WeekId) na tabela de Resposta a referência (Id, WeekId) na Pergunta mesa. Talvez por isso você tem que definir um índice sobre o par (Id, WeekId) na Pergunta mesa antes.

Outras dicas

Você realmente precisa para associar uma participação com a sua semana? Você pode obtê-lo através Pergunta

Assim:

  • Resposta (Id, UserId, QuestionID, Value)
  • Pergunta (Id, WeekId, texto)
  • Week (Id, StartDate)

Pessoalmente, eu acho que você tem a aplicação adequada aqui.

ParticipationId links para a identificação com a participação, que é introduzido com o usuário e a semana. Sua mesa Pergunta é introduzido com o WeekId também.

Portanto, você tem as referências apropriadas tempo todo. Se este não for o caso, acho que teremos de ver alguns dados

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top