Domanda

Sto implementando un sistema di contest in cui l'utente deve scegliere la risposta corretta a più domande. Ogni settimana c'è una nuova serie di domande. Sto cercando di trovare il modo corretto di memorizzare le partecipazioni degli utenti in un database. In questo momento ho il seguente modello di dati:

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

L'unica soluzione che mi è venuta in mente è quella di aggiungere una tabella di risposte che associ una partecipazione a una domanda, come indicato nel seguente diagramma:

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

Non collego questa soluzione è molto buona, perché consente a una partecipazione di avere risposte a domande di una settimana diversa. L'aggiunta di WeekId alla risposta non aiuta.

Qual è il modo corretto di rappresentare queste informazioni?

È stato utile?

Soluzione

È possibile rimuovere il campo Id nella tabella Participation e utilizzare (UserId, WeekId) come chiave primaria composta / concatenata per la tabella Participation. Il campo ParticipationId nella tabella Answer deve essere sostituito dalla coppia (UserId, WeekId) come riferimento di chiave esterna alla tabella Participation. Se il sistema di database lo consente, è possibile definire i campi (QuestionId, WeekId) nella tabella Rispondi a riferimento (Id, WeekId) nella tabella Domanda. Forse per questo devi definire un indice sulla coppia (Id, WeekId) nella tabella Domanda prima.

Altri suggerimenti

Hai davvero bisogno di associare una partecipazione alla sua settimana? Puoi farlo tramite la domanda

  • Risposta (Id, UserId, QuestionID, Value)
  • Domanda (Id, WeekId, testo)
  • Settimana (Id, StartDate)

Personalmente penso che tu abbia la corretta implementazione qui.

ParticipationId si collega all'ID sulla partecipazione, che viene codificato con l'utente e la settimana. Anche la tabella delle domande è codificata con WeekId.

Pertanto, hai sempre i riferimenti corretti. In caso contrario, penso che dovremo vedere alcuni dati

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top