sql - 以下情况的最佳方案是什么?

标签 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 

对此可能的最佳架构是什么?

最佳答案

我建议你想要类似的东西......

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)

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

关于sql - 以下情况的最佳方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257454/

相关文章:

sql - 从表 b 更新表 a 其中(条件)

用于选择最后插入的行的 php 代码

php - 在一页或所有页面上写 session 开始?

php - 用于自定义名称图像上传和发送到 MySQL 的数据的表单操作和 ajax 查询

MySQL 如何将列中的字符串按 ""拆分并将结果插入到另一列中?

php - 每天计算 'work time' 和 'lunch time' - php/mysql

java - 将前缀连接到 jooq 整数类型值

php - mysql , PDO 和 php 多选搜索

python - 将新列从 Pandas 添加到 SQLite 表的工作流程

mysql - SQL Ant 任务 : WARN: Establishing SSL connection without server's identity verification is not recommended