如何正常化协会之间的每周参与每周一次的问题?
-
05-07-2019 - |
题
我执行一个竞赛系统在用户具有选择的正确答案的多个问题。每星期,有一个新的问题。我试图找到正确的方式来存储用户的参与在一个数据库。现在我有以下数据模型:
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一起使用。
因此,您一直都有适当的参考。如果不是这种情况,我认为我们需要查看一些数据
不隶属于 StackOverflow