0

我正在制作一个测验程序。在测验中,我有很多参与者,但另一方面参与者可以输入许多测验(随着时间的推移)。所以我用链接表克服了这种多对多的关系。到目前为止,我能理解.. 现在我的困难是:参与者可以是一个小组,也可以是一个单独的玩家。

所以一个测验有一个参与者(带有一个链接表),这个参与者或者是一个有几个人的小组,或者这个参与者是一个玩家并且只有一个人。

table Quiz : PrimaryKey = quiz_id, (name, date,... )
table QuizParticipant : PrimaryKey = quiz_participant_id, quiz_id 
table ParticipantGroup : PrimaryKey = quiz_participant_id, group_id
table participantPlayer : PrimaryKey = quiz_participant_id, person_id

我的问题是:如何通过 quiz_id 查询测验的所有参与者,最好按类型(组或玩家)对他们进行排序?

关于如何用谷歌搜索这些东西的提示也很有用:)

4

3 回答 3

0

我的建议是始终将您的测验链接到组(多对多)并将单个玩家视为一组 1。因此您的组与玩家相关联(也是多对多)

于 2013-02-18T23:33:33.400 回答
0

如果一个人可以属于多个群体,一个群体可以有很多人,那就是另一种多对多关系。既然您知道如何创建这些链接表,请为这种关系创建一个。

于 2013-02-18T23:37:10.833 回答
0

这是一个有趣的设计决定。您进行的方式可以塑造您的整个应用程序。

我的建议是在每次参与时记录参与者类型。这可以是“GROUP”或“PLAYER”,并将定义 ParticipantID 是指 GroupID 还是 PlayerID。这将最终产生最干净的数据库设计和应用程序逻辑。

所以你的表看起来像:

Quiz (QuizID,QuizName) QuizParticipation (ParticipationID, ParticipantType, ParticipantID) Group (GroupID,GroupName) GroupMembers(GroupID,PlayerID) Player(PlayerID,Name)

您可能需要进行自定义约束,以确保不会在 QuizParticipation 表的 ParticipantID 和 ParticipationType 组合字段中创建重复项,或者仔细管理主键的生成。

于 2013-02-19T10:12:57.667 回答