2014-03-04 1 views
1

나는 사용자, 그룹이 새로운 웹 플랫폼에서 일하고 있어요 그 사용자는 특정 작업을 수행하는 성과를 (각 그룹이 자신의 업적을 가지고)받을 수 있으며, 이러한 내가 지금 가지고있는 테이블입니다 :사용자/그룹/업적 데이터베이스를 작성하는 방법은 무엇입니까?

  • 사용자
  • 그룹
  • Group_users
  • 성과
  • User_achievements (사용자가 둘 이상의 그룹에 가입 할 수 있기 때문에, 매장 사용자의 그룹에 사용) (사용자가 하나 개 이상의 성과를 가질 수 있기 때문에, 매장 사용자의 업적에 사용) 내 질문의 User_achievements 테이블에, 나는 관계를 보유하고있는 사용자 및 그룹 아이디 나 단지 GROUP_USER ID를 저장해야한다

그룹과 사용자간에?

답변

1

질문에 대답하기 전에 먼저 업적이이 테이블의 그룹이 아닌 사용자에게 연결되어 있으므로 user_id를 외래 키로 user_achievements 테이블에 저장합니다.

성과가 그룹에 연결되어있는 경우 다른 답에 대한 의견에서 언급 한 것처럼 해당 관계는 user_achievements 테이블이 아닌 업적 테이블에 표시되어야합니다.

또한 Group_users 테이블에 고유 한 ID가있는 이유는 무엇입니까? (단순한 의미가 아닌 것처럼 보입니다), 다 대다 관계에 참여하는 것만이 아닌가? 이 경우 group_users 테이블의 기본 키를 user_id 외래 키와 groups_id 외래 키의 조합으로 만 만들면 안됩니다. 두 개의 외래 키 조합이 그 자체로 고유하기 때문에 테이블에 대한 고유 ID가 필요하지 않습니다.

편집 :

그래서 내가 이런 식으로 할 거라고 :

Users table: 
    id (Primary Key) 
    ... What ever other data you want to store for the user ... 

Groups: 
    id (Primary Key) 
    ... What ever other data you want to store for the group ... 

Group_users: 
    user_id (Foreign Key to users.id) (Part of primary key) 
    group_id (Foreign Key to groups.id) (Part of primary key) 

Achievements: 
    id (Primary Key) 
    group_id (Foreign Key to groups.id) 
    ... What ever other data you want to store for the achievement ... 

User_achievements: 
    achievement_id (Foreign key to achievements.id) (Part of primary key) 
    user_id (Foreign key to users.id) (Part of Primary Key) 
+0

각 그룹마다 업적이 있으며 그 그룹의 사용자 만받을 수 있음을 언급하는 것을 잊어 버렸습니다. 질문이 수정되었습니다. – M1k4

+0

그 대답에 대해서도 편집했습니다. –

+0

나는 스키마를 디자인하는 방법을 보여 주었다. –

0

users_achievement 테이블에서 user 및 group_id를 사용하는 것이 좋습니다. 원인. 선택 쿼리를 사용하는 동안

  1. 당신은 SQL은 두 테이블을보고 u는 말했다 같은 innerjoin
  2. 을 수행해야하므로 더 많은 시간이 걸릴 것입니다 사용자 ID를 얻을 수있는 innerjoin을해야합니다 그에 대한 user_achievements 그리고 확실히 groups_achievements 그리고 USER_ID가

:

0

1) 성과가 둘 이상의 사용자 (또는 user_group)와 연결하는 것이 가능해야한다? 대답이 둘 이상의 사용자 인 경우 user_achievement 테이블이 필요합니다. 그렇지 않으면 사용자 ID를 업적 테이블 자체에 넣을 수 있습니다.

2) 업적은 user_group 또는 사용자와 관련이 있습니까? 답변 user_group 인 경우 user_group_achievement 테이블이나 직접 achivement 테이블에 사용자 그룹 ID를 저장하십시오 (첫 번째 질문 참조). 그렇지 않으면 user_achievement 테이블 또는 user_group_achivement 테이블에 사용자 ID를 저장하십시오 (다시 첫 번째 질문).

users 
------- 
user_id 
user_name 


groups 
------- 
group_id 
group_name 


user_groups 
----------- 
user_id 
group_id 


achievments 
------------ 
achievement_id 
achievement_name 


user_achievements 
----------------- 
user_id 
achievment_id 


group_achievements 
----------------- 
group_id 
achievement_id 

그래서 사용자 그룹, 사용자 업적 및 그룹 업적간에 많은 관계가 있습니다. 사용자 성과

그것이 또한 걸릴 것에 대한 그룹 모든 그룹에 대한 성과 모든 업적에 대한 사용자 모든 사용자에 대한 모든 성과에 대한 그룹 모든 그룹에서 모든 사용자 :

은 당신이 할 수있는

찾을 조인 그룹 성과와 연관된 모든 사용자를 찾으려면 가입하십시오.

+0

내가 그 망통 깜빡, 각 그룹은 자신의 업적을 가지고있다. – M1k4