2010-07-15 2 views
0

다음 조건에 대해 가능한 최상의 테이블 스키마를 만드는 데 도움이 필요합니다.다음 조건에 대해 가능한 최상의 스키마는 무엇입니까?

사람들이 그룹으로 가입 할 수있는 경쟁이 있습니다. 각 그룹에는 groupid가 있으며 각 사용자에게는 uid가 있으며 각 그룹에는 group_question_id와 같은 그룹 고유 데이터가 있습니다. 단일 사용자는 여러 그룹에 속할 수 있습니다. 각 사용자는 group_answer_uid를 사용하여 그룹 질문에 응답 할 수 있습니다. 사용자에 대한 group_answer_uid (s)의 수는 그가 속한 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

나는

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) 

이 사용자가 따라 각 질문에 다른 대답을 할 수 있다고 가정처럼 보일 것입니다 ... 당신이 뭔가를 원하는 것 제안 그가 속한 그룹에게.

관련 문제