以下条件的最佳可能模式是什么?

时间:2010-07-15 16:00:47

标签: sql mysql

我需要一些帮助来为以下条件创建最佳的表模式。

有一项竞赛允许人们分组注册。每个组都有一个groupid,每个用户都有一个uid,每个组都有一组特定的数据,如group_question_id等。单个用户可以是多个组的一部分。每个用户都可以使用group_answer_uid回答群组问题。用户的group_answer_uid数量等于他所属的groupid数量。

Data
====
1)groupid
2)uid
3)group_question_id (specific to each group)
4)group_answer_uid (specific to each group for each user)

必须进行以下查询。

1. list all groups the user is part of
2. list all users in a groupid
3. list all group_answer_uids for a given group 

可能的最佳架构是什么?

1 个答案:

答案 0 :(得分:1)

我建议你想要像......那样的东西。

USER table, keyed on user_id
GROUP table, keyed on group_id
USER_GROUP table, holding user_id, group_id pairs
QUESTION table, keyed on question_id
GROUP_QUESTION table holding group_id, question_id pairs
ANSWER table holding user_id, group_id, question_id triplets.

然后查询看起来像

SELECT group_id
    FROM USER_GROUP
    WHERE user_id = (our user);

SELECT user_id
    FROM USER_GROUP
    WHERE group_id = (our group);

SELECT answer_id
    FROM ANSWER
    WHERE group_id = (our group)

这假设用户可以根据他所在的群组对每个问题给出不同的答案。