2013-08-13 3 views
1

사용자간에 "우정"을 문서화하기 위해 사용자 테이블과 조인 테이블이 있습니다. "우정"관계를 문서화하는 방법에 대한 질문이 있습니다.두 개의 MySQL 테이블간에 "친구"관계 디자인하기

User Table 
u_ID | u_Name 
------------- 
1  | bob 
2  | jill 

밥과 질이 친구라고 가정 해 봅시다. 조인 테이블에서 양방향으로 우정을 문서화해야합니까?

양방향 관계 ??

Friends Table 
f_ID | u_ID1 | u_ID2 
-------------------- 
1 | 1 | 2 
2 | 2 | 1 

또는 단방향 관계가 충분합니까 ??

Friends Table 
f_ID | u_ID1 | u_ID2 
-------------------- 
1 | 1 | 2 

내 유스 케이스는 Facebook의 친구 관계에 가깝습니다. 내가 너의 친구라면, 너는 내 친구 야. 우리 둘다 관계를 보증해야 해. tx.

+1

단일 방향 관계이면 충분합니다. 그녀의 친구가 될 수 있으며 그녀는 당신의 친구가 아니십니까? –

답변

3

친구 관계는 항상 양방향이기 때문에 두 줄만 저장하면 안됩니다.

  1. 옵션 :

    당신은 테이블의 첫 번째 필드는 우정을 시작한 하나입니다 결정할 수 있습니다. 나는 두 개의 행을 더 추가 할 것이다 : 날짜와 확인. 높은 USER_ID 첫 번째 필드 낮은 USER_ID와 두 번째 필드에

  2. 옵션

    스토어. 이를 통해 unique index (field1, field2)constraint field1 < field2을 정의 할 수 있습니다. 이렇게하면 우정 관계의 단결을 강화할 수 있습니다. 한편

    당신은

+1

@Declan_K 그는 두 번 저장해야한다고 말하지 않았습니다. – user6123723

+0

죄송합니다. 완전히 잘못 읽었습니다 - 댓글이 삭제되었습니다 ... –

2

당신은 int로 점수 필드를 추가 할 수 있습니다 (USER_ID를 사용하지 않을 0/1) 우정을 시작하는 사람들 저장하기 위해이 추가적으로 필드를해야합니까?

  • 세트 1, ID1은 -> ID1 -> ID2는
  • 2
  • 이 ID2입니다 허용됩니다.
  • 나중에 더 많은 관계 유형이 필요하면 더 높은 숫자 (비트 수, 4, 8, 16 등)를 사용하십시오.

이것은 약간 더 많은 코드로 작동하지만 디스크 공간에서는 효율적입니다. 얼마나 많은 행을 처리해야합니까?

는 bitmaths로 기록 될 수 있습니다 ID2의

select u_id, u_name from users join Friends on u_id=id1 where id2= @X and (score & 1)=1; 

모두 문을 나열하려면 ID1의 친구

select u_id, u_name from users join Friends on u_id=id2 where id1= @X and (score % 2) =1; 

를 나열합니다.

관련 문제