2011-10-09 3 views
1

내가 newsletters 다음 subscribers 말해봐 :많은에 많은 비정규하지만 SQL 세계에서 중복 데이터를 저장하지 않으

때마다 우리는 테이블에이를 저장해야하는 뉴스 레터에 대한 사용자 subscribes - 가입자 목록 .

이것을 newsletter table 또는 user table에 저장해야합니까? 나는. 뉴스 레터가 구독자 목록을 저장하거나 사용자가 구독 한 뉴스 레터 목록을 저장해야합니까? 두 경우 모두 널리 사용됩니다. 사용자는 자신이 구독 한 뉴스 레터를 표시해야하며 뉴스 레터는 구독 한 사용자를 표시해야합니다.

읽기에 최적화 된 테이블 구조는 어떻게 디자인 할 수 있습니까? I NoSql 경로로 이동하고 싶지 않습니다.

+2

왜/여분의 방식으로 저장해야하는지 어떻게 결정하셨습니까? 'many-to-many' 테이블이 적절히 인덱스 화되어 있다면, 검색은 꽤 솔직해야합니다. –

답변

2

이것은 많은 테이블을위한 것입니다. 두 테이블 간의 관계를 별도의 테이블에 저장합니다. 예 : 당신의 UsersSubscribers 테이블이 같은

newsletter 
id, 
name, 
etc. 

subscriber 
    id, 
    last, 
    first, 
    etc. 

newsletter_subscriber 
    id, 
    subscriber_id, 
    newsletter_id, 
    other attributes, etc. 
3

있습니까? 그렇지 않으면 그들은 있어야합니다. Users 테이블에는 사용자, Newsletters 테이블, 뉴스 레터 및 해당 Subscribers의 관계가 포함되어야합니다.

은 당신이 말 :

사용자

user_id name 
1   a 
2   b 
3   c 

뉴스 레터

newsletter_id name 
1    x 
2    y 
3    z 

가입자

user_id newsletter_id 
1   1 
1   2 
2   2 

사용자 A가 사용자 B가에 가입, x와 y에 가입 와이. 구독자 테이블에 user_idnewsletter_id 뒤에 인덱싱을 추가해야하며 PK는 (user_id,newsletter_id)이어야합니다.