2011-01-09 6 views
3

미래에 나에게 가장 쉬운 방법이 효과적이고 덜 복잡한 쿼리를 만드는 것이 무엇인지 궁금합니다.친구, 친구, 친구 등을위한 SQL 테이블

내가

from_id = 1, to_id = 2 from_id = 2, to_id = 1

하거나 생성 한 고유 한 행과 같은 두 가지 방법으로 관계를 저장해야

from_id = 1, to_id = 2

의견이 있으십니까?

+3

테이블의 전체 구조와 쿼리 예제를 게시 할 수 있습니까? 데이터베이스를 최적화하는 방법을 알기 위해서는 우리가 제공 한 일반적인 설명보다 더 많은 정보가 필요합니다. –

답변

7

나는 양방향 관계에 대해 제안 할 것입니다. 그것은 유연성이 있으며 여분의 작업 일 뿐이며 및 delete 기록을 남깁니다. 내가 볼

장점은 다음과 같습니다

  • 은 당신이 할 필요가 where from_id=userid 대신 나중에 비싼 where from_id=userid or to_id=userid하는 사람의 모든 친구를 얻으려면.
  • 정방향 및 역방향 관계로 추가 메타 데이터를 유지할 수 있습니다. userA is friend of userB while userB does not approves the relationship과 같은 사례가 있다고 가정 해 보겠습니다. 이렇게하려면 추가 isApproved이 있고 from_id=userA, to_id=userB의 경우 true으로 설정하고 from_id=userB, to_id=userA의 경우 false - sortselect을 추가로 허용합니다.

    단일 행의 효과가 조금 더 까다 롭습니다.
+2

http://explainextended.com/2009/03/07/selecting-friends/에는이 주제에 대한 심층적 인 토론이 포함되어 있습니다. 결론은 릴레이션 당 두 행을 유지하는 데 약간의 벌칙 만 쿼리하는 것이 훨씬 쉽습니다. – araqnid

+0

덕분에 많이 도움이되었습니다. :) – Alexander

+0

@Alexander 대답 옆에있는 인상적인 표시를 클릭하여이 대답을 표시하고이 대답을 좋아한다면 위쪽 화살표를 클릭하여 최대 투표를 부여 할 수 있습니다. – Nishant