2012-01-11 5 views
0

데이터베이스에 이벤트 테이블과 테이블에 뮤지션을 저장하는 테이블이 있습니다. 내가하려고하는 일은 뮤지션들이 어떤 이벤트에서 연주했는지 추적하는 것입니다. 가장 효율적인 방법은 무엇입니까? event_id을 뮤지션 테이블에 넣고 뮤지션이 참여하는 각 이벤트에 대해 새 레코드를 만들어야합니까? event_idmusician_id이있는 별도의 조회 테이블을 만들고 특정 이벤트에서 연주 한 뮤지션을 얻으 려 할 때 테이블에 가입해야합니까? 문제는 현재 약 50 명의 뮤지션이 있으며 연간 50 건의 이벤트를 재생할 수 있다는 것입니다. 이는 중복 된 데이터가 많으며 이벤트가 진행될 확률이 높으며 그 수가 100 명으로 늘어날 수도 있습니다. 어떤 아이디어?데이터베이스 테이블 디자인

답변

2

나는 당신을 위해 테이블을 배치하지 않지만 기본 구조는 다음과 같습니다

musicians - 이벤트에 대한 자세한 내용 (예 : 50 명 기록 - 예술가에 대한 자세한
events (예 : 50 개 기록을.))
musicians_events - 예술가가

공동 테이블은 단순히 두 필드로 구성 할에서 연주 이벤트 나열 공동 테이블 : 음악가 ID 이벤트 ID, 다시 각각의 부모 테이블에 모두있는 외래 키.

모든 이벤트에서 모든 뮤지션이 연주하면 지정된 데이터 크기로 50 개의 음악 레코드, 50 개의 이벤트 레코드 및 잠재적으로 2,500 개의 음악 이벤트 레코드가 생성됩니다.

+0

위대한, 고마워, 그게 내가 알아야 할 필요가있어! – user1143767

+0

더하기, musicians_events (음악가 ID 및 이벤트 ID)에 UNIQUE 다중 열 인덱스를 만들 수 있습니다. 음악가 및/또는 이벤트의 수를 늘리면 앞으로 더 나은 성능을 보장 할 것입니다! – mgm

1

뮤지션과 이벤트 간의 다 대다 관계를 매핑하려면 별도의 찾아보기 테이블 (접합 테이블이라고도 함)이 필요합니다.

테이블에는 uniqueID, MusicianID 및 EventID의 세 필드가 필요합니다.

0

조인 테이블을 사용해야합니다. 그것이 event_idmusician_id 테이블을 가지고있는 곳에서 설명한 옵션입니다.

테이블에 적절한 인덱스를 넣으면 잘 수행됩니다.

0

이벤트 테이블과의 관계가 많은 테이블 음악가를 만들겠다. 의 당신이라는 관계 표를 가지고 것을 의미

은의에 포함 된 MusiciantEvent 말을하자 모두 기본 키 (MusiciantID과에서 EventId)

0

이 당신이 테이블을 가져야한다 전형적인 다 대다 관계 같은 소리 음악가, 이벤트를위한 또 다른 표 그리고 그들 사이의 관계를 저장하는 세 번째 표가 있습니다. 그 테이블에는 음악가와 이벤트 아이디가있을거야.

0

이벤트에 여러 명의 뮤지션이있을 수있는 경우이를 모델링하는 올바른 방법은 제안한 두 번째 옵션입니다. musician_id와 event_id를 사용하여 두 번째 테이블을 만들어 두 번째 테이블을 만들면됩니다.

데이터 양 - 50 x 50은 2,500 개의 레코드로, MySQL에서는 아무 것도 아닙니다. 적절한 인덱싱을 통해 MySQL은 테이블에서 수백만 레코드를 쉽게 처리 할 수 ​​있습니다.

0

이 분명히 m입니다 : n 또는 다 대다은 상황에 가입하십시오 musician_id

  • musician 테이블 : 당신은 세 개의 테이블이 필요합니다.

  • event 테이블이 event_id 인 테이블.

  • 두 필드가 기본 키인 musician_idevent_id 인 접합 테이블 (musician_events).

논리적으로는 다 대다 관계입니다. 실제로 musicianmusician_events 사이의 일대 다 관계와 eventmusician_events 사이의 일대 다 관계가 있습니다.

뮤지션이 많은 이벤트에 참여할 수 있고 이벤트에 많은 뮤지션이 참여할 수 있기 때문입니다. 그래서 이것은 단지 샘플 그런 자연

**tbl_Event** 
Event_ID 
Event_Name 
Event_Location 


**tbl_Musician** 
    musician_id 
    musician_firstName 
    musician_lastname 

***tbl_join*** 
    event_ID 
    musician_ID 

뭔가처럼

musician    musician_events   event 
+-----------------+ +--------------------+  
| PK musician_id |--->| PK FK musician_id | +--------------+ 
|  name  | | PK FK event_id |<---| PK event_id | 
+-----------------+ +--------------------+ |  date  | 
               +--------------+ 
0

나는 이벤트에 대한 테이블을 만들 것입니다. 나는 전문가는 아니지만 어디서든 중복 데이터를 많이 보게되면 피해야합니다.

관련 문제