我正在实施一个比赛系统,用户必须选择多个问题的正确答案。每周都有一组新的问题。 我试图找到将用户参与存储在数据库中的正确方法。现在我有以下数据模型:
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添加到答案中没有用。
表示此信息的正确方法是什么?
答案 0 :(得分:1)
您可以删除表Participation中的Id字段,并使用(UserId,WeekId)作为表Participation的组合/连接主键。表中的参与字段表示您必须替换然后通过对(UserId,WeekId)替换表参与的外键引用。如果您的数据库系统允许,您可以在表格Question中引用表格(Id,WeekId)中的字段(QuestionId,WeekId)。也许为此你必须在表格问题之前在对(Id,WeekId)上定义一个索引。
答案 1 :(得分:0)
你真的需要将参与与本周联系起来吗?你可以通过问题
获得它所以:
答案 2 :(得分:0)
我个人认为你在这里有适当的实施。
ParticipationId链接到参与的ID,该ID与用户和周密钥相关。您的问题表也与WeekId一起使用。
因此,您一直都有适当的参考。如果不是这种情况,我认为我们需要查看一些数据