我执行一个竞赛系统在用户具有选择的正确答案的多个问题。每星期,有一个新的问题。我试图找到正确的方式来存储用户的参与在一个数据库。现在我有以下数据模型:

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

唯一的解决办法,我来是要添加一个回答表,将参与一个问题,如以下图:

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

我不链接这个方案是非常好的,因为它允许一个参与有问题的答案,从一个不同的星期。加WeekId的答复并没有帮助。

什么是正确的方式表示这一信息?

有帮助吗?

解决方案

您可以删除表Participation中的Id字段,并使用(UserId,WeekId)作为表Participation的组合/连接主键。表中的参与字段表示您必须替换然后通过对(UserId,WeekId)替换表参与的外键引用。如果您的数据库系统允许,您可以在表格Question中引用表格(Id,WeekId)中的字段(QuestionId,WeekId)。也许为此你必须在表格问题之前在对(Id,WeekId)上定义一个索引。

其他提示

你真的需要将参与与其周?你可以得到它的通过问题

所以:

  • 回答(Id,UserId,Feeditemid,值)
  • 问题(Id,WeekId,文本)
  • 周(Id,StartDate)

我个人认为你在这里有适当的实施。

ParticipationId链接到参与的ID,该ID与用户和周密钥相关。您的问题表也与WeekId一起使用。

因此,您一直都有适当的参考。如果不是这种情况,我认为我们需要查看一些数据

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top