Frage

Ich bin die Umsetzung einen Wettbewerb System, in dem der Benutzer die richtige Antwort auf mehrere Fragen wählen hat. Jede Woche gibt es eine neue Reihe von Fragen. Ich versuche, den richtigen Weg zu finden, die Benutzer Beteiligungen in einer Datenbank zu speichern. Im Moment habe ich folgende Daten ein:

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

Die einzige Lösung, die ich mit aufkam, ist eine Antwort Tabelle hinzuzufügen, die eine Teilnahme mit einer Frage verknüpft, wie im folgenden Diagramm dargestellt:

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

Ich verbinde nicht diese Lösung sehr gut, weil es sich um eine Teilnahme Antworten aus einer anderen Woche zu Fragen haben können. Das Hinzufügen des WeekId auf die Antwort nicht hilft.

Was ist der richtige Weg, um diese Informationen zu vertreten?

War es hilfreich?

Lösung

Sie können das ID-Feld in der Tabelle Teilnahme entfernen, und verwenden (UserId, WeekId) als komponiert / verketteten Primärschlüssel für die Tabelle Teilnahme. Das Feld ParticipationId in der Tabelle Antwort Sie dann durch das Paar (UserId, WeekId) als Fremdschlüssel Bezug auf die Tabelle Teilnahme ersetzen müssen. Wenn Ihr Datenbanksystem es erlaubt, können Sie definieren dann die Felder (QuestionID, WeekId) in der Tabelle Antwort zu referenzieren (Id, WeekId) in der Tabelle Frage. Vielleicht für diese müssen Sie, bevor Sie einen Index für das Paar (Id, WeekId) in der Tabelle Frage definieren.

Andere Tipps

Haben Sie wirklich eine Teilnahme mit seiner Woche assoziieren müssen? Sie können es durch Frage bekommen

So:

  • Antwort (Id, Benutzer-ID, QuestionID, Wert)
  • Frage (Id, WeekId, Text)
  • Woche (Id, Startdatum)

Ich persönlich denke, Sie die korrekte Umsetzung hier haben.

ParticipationId Links auf die ID über die Beteiligung, die mit dem Benutzer und der Woche verkeilt ist. Ihre Frage zum Tisch ist auch mit dem WeekId verkeilt.

Deshalb müssen Sie die richtigen Referenzen entlang. Ist dies nicht der Fall ist, ich denke, wir müssen einige Daten sehen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top