2010-06-25 4 views
1

나는 내 친구 테이블에 다른 무엇을 추가해야하는지 궁금해서 사용자가 온라인 상태 일 때와 같은 친구를 두 번 추가하는 것을 어떻게 막을 수 있습니까? 뿐만 아니라 내 친구 테이블을 더 잘 만들 수있는 방법에 대한 제안은 무엇입니까?MySQL 친구 테이블 구조 도움말?

여기 내 MySQL 테이블입니다.

CREATE TABLE friends (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
user_id INT UNSIGNED NOT NULL, 
friend_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
); 

답변

3

당신은 피벗 테이블에 id 필요하지 않습니다이 PRIMARY KEY(user_id, friend_id) 같은 기본 키, 이것은 중복을 가진 방지 할 정의 할 수 있습니다.

+0

한 사용자가 친구를 추가하고 싶지만 다른 사용자는 친구를 추가하기를 원한다면 어떻게됩니까? – alpha

+0

@alpha : 관계는'id'는'user_id'를 친구로 간주합니다. 반대로, 당신이 암시 할 수있는 가장 큰 의미는 'user_id'는 친구가 아니라'id '의 지인이라는 것입니다. 반대의 값과의 매칭이 존재하지 않는다면 말입니다. –

+0

그래서 더 많은 필드를 추가해야합니다. 'friendship_accepted'는 부울 값일 수 있습니다. 생성시 0으로 설정하고 친구가 수락 한 경우 1로 설정 –

0

IMO id 속성이 필요하지 않습니다.
때때로 유용 할 수있는 타임 스탬프를 추가 할 수 있습니다.
user_id와 friend_id 모두에 대한 키를 작성하십시오.이 키는 고유하므로이 튜플을 두 x 작성할 수 없습니다.

+0

일부 ORM에는 복합 키가있는 테이블에 문제가 있습니다 –

+0

대단히 ORM에 따라 달라집니다 - 여기서 릴레이션을 디자인합니다. – wlk

0

테이블 디자인에 관한 것이라면 user_id와 friend_id의 조합을 고유 키로 만들거나 모든 세 개의 필드를 기본 키로 만들 수 있습니다. 그러나 작동합니다.

다른 것은 당신이 선택한 PHP 또는 연결 언어를 ​​사용하여이 문제를 제어 할 수 있습니다.

도움이 될지 알려주세요.