2010-05-09 3 views
0

사용자 및 업적 두 개의 테이블이있는 SQL Server 데이터베이스가 있습니다. 내 사용자는 여러 업적을 가질 수 있으므로 다 대다 관계입니다.SQL Server many-to-many 디자인 권장

학교에서 우리는 그런 종류의 관계에 대한 연관 테이블을 만드는 것을 배웠습니다. 이것은 UserID와 AchivementID가있는 테이블을 만드는 것을 의미합니다. 하지만 500 명의 사용자와 50 개의 업적을 갖고 있다면 25,000 행이 될 수 있습니다.

대신 내 Users 테이블에 이진 필드를 추가 할 수 있습니다. 예를 들어, 해당 필드에이 사용자가 첫 번째 및 네 번째 업적을 달성했음을 의미하는 10010이 포함 된 경우

다른 방법이 있습니까? 그리고 어느 것을 사용해야합니까.

+0

이러한 성취도를 연속적으로 완료하거나 잠금 해제해야합니까? – NitroxDM

+3

연관 테이블을 사용하십시오. 각 사용자의 업적이 50 개인 경우 25000 행입니다. 각 사용자는 50 명입니까? 나는 그렇게 생각하지 않는다. 그리고 다른 무엇을 달성하기를 원하십니까? 디스크 공간이나 효율적인 질의를 줄이기 위해서? – berkay

+2

세 번째 표를 사용하면 가능한 관계가 25000 가지가되며 각 사용자가 모든 만족도를 얻지 못하는지 의심 스럽지만 훨씬 더 유연한 솔루션입니다. –

답변

2

대체 방법은 전혀 좋은 접근 방법이 아닙니다. 질의 할 수 없을뿐만 아니라 (얼마나 많은 사람들이 업적 # 10의 잠금을 해제 했습니까?), 아무 의미도 없습니다. 게다가 5 개의 업적을 더 추가하면 어떻게 될 것입니까? 모든 이전 사용자를 업데이트하여 '업적'열의 끝에 '00000'을 추가 하시겠습니까?

적절하게 색인을 생성하면 연관성 테이블에 아무런 문제가 없습니다. 이러한 접근 방식을 사용하면 데이터를 무한히 쿼리 할 수 ​​있으며 더 중요한 것은 의미가 있습니다!

관련 문제