2011-08-27 4 views
1

나는 내 웹 사이트에 대한 친구의 시스템을 통합하고 여러 값에 대한 질문 ...MySQL의 테이블 레이아웃, 동일한 열

한 질문이 설정되는 방법이다.

freind 1, 2, 3, 4, 5 등과 같이 친구가 추가 할 때마다 많은 열을 가질 수 있으며 행은 추가 된 사용자가됩니다.

더 좋은 방법이 있나요 ?? 그런 식으로하는 첫 번째 생각은 친구들이 가질 수있는 친구의 양에 대한 상한선을 의미합니다 ...

+0

1 행 테이블을 사용하게 되나요? 그건 정말 똑똑한 DB 디자인이 아닙니다. 나는 1 테이블 (id, friend.id, friend_id_who_added)과 다른 테이블 friend (id, name)와 같은 것을 생각하고있다. – Trefex

답변

3

복수 열에 대한 제안은 first normal form을 위반합니다. 인위적으로 친구의 수를 제한하는 것은 그러한 구조가 지루하고 지루하고 비효율적입니다.

복합 기본 키를 구성하는 2 개의 열 (userid1, userid2)이있는 친구의 접합점 표가 필요합니다. 두 열 모두 user 테이블과 FK 관계가 있습니다.

많은 RDBMS에서 검사 제약 userid1 > userid2을 가질 수 있으므로 관계는 하나의 형식으로 만 저장할 수 있지만 검사 제약 조건은 somewhat broken in MySQL입니다.

+0

+1 : 복합 기본 키는 역 중복을 막지 않을 것이다. IE : 1,2와 2,1은 유효한 복합 PK 값으로 간주됩니다. –

+0

좋아요,이 기술을 배울 수있는 곳으로의 링크가 있습니까? – carlgcoder

+0

@carlgoder - 제 답변의 요지는 실제로 정상화에 관한 것입니다. [첫 번째] (http://en.wikipedia.org/wiki/First_normal_form), [두 번째] (http://en.wikipedia.org/wiki/Second_normal_form) 및 [세 번째] (http : //en.wikipedia.org/wiki/Third_normal_form) 일반 양식. –

2

회원이 보유한 각 친구에 대한 레코드가있는 추가 테이블이 필요합니다. 예를 들면 다음과 같습니다.

members (id, name) 
friends (member1, member2)