2012-12-05 2 views
0

시도 내가 약이 post에서 아이디어를 찾을 아직도 thinkings을 얻으려고 스키마 관계매핑 관계 - 외래 키 또는 매핑 테이블

을 생성 할 때 선택이 더있는에 대해 여기에 몇 가지 전문적인 아이디어를 얻을 수 있습니다.

간단한 시나리오는 다음과 같을 수

class <--> Student <--> Teacher <--> class 

(복수 수업을 할 수있는 교사 가정) 그것이 라운드 many-to-many 관계 일반적인 시나리오이다. 그리고 쿼리는 모든 피어에서 어떤 방향 으로든 시작할 수 있습니다. 그렇다면 더 나은 디자인은 무엇일까요?

매핑 테이블은 분명히 낭비이지만, 매핑 테이블 솔루션 ONLYmany-to-many 관계에 좋은 것으로 알고 있습니다. 우리가 방향과 함께 많은 관계를 확장하고자한다면. 관계가 bidirectional 대신 one-direction 인 경우 대답이 다를 수 있습니까?

미리 감사드립니다.

+0

매핑 테이블을 고려하는 이유를 설명해 주시겠습니까? 또한, 당신은 관계의 방향에 대해 걱정할만한 부분을 제시 할 수 있습니까? – RonaldBarzell

답변

4

몇 가지 간단한 규칙 : 일대일 관계를

는 외래 키는 다른 테이블을 참조, 관계에 관련된 테이블 중 하나에서 개최 할 수있다.

일대 다 관계의 경우 관계의 여러면에있는 테이블이 외부 키를 보유해야합니다.

many-to-many 관계의 경우, 다 대다 관계에 관련된 두 테이블 모두에 외래 키를 보유하는 세 번째 테이블 인 연관 테이블 (용어로 매핑 테이블)을 생성 할 수 있습니다 .

예를 들어 STUDENT, CLASSTEACHER 테이블이 있다고 가정합니다. 일반적으로 STUDENTCLASS 사이에는 다 대다 관계가 있고 교사는 클래스가 한 명일 경우 교사와 일대 다 관계가 있습니다. 따라서이 테이블은 다음과 같이 보일 수 있습니다 :

STUDENT: STUDENT_ID, STUDENT_NAME, etc. 
CLASS: CLASS_ID, TEACHER_ID (foreign key), CLASS_NAME, etc. 
TEACHER: TEACHER_ID, NAME, etc. 
STUDENT_CLASS (mapping table): STUDENT_ID (foreign key), CLASS_ID (foreign key), GRADE, etc. 
1

다 - 대 - 다 관계가 있다면, 네, 매핑 테이블이 필요합니다. 관계형 데이터베이스에는 다 - 대 - 다 관계에 대한 정보를 저장하는 다른 합리적인 방법이 없습니다 (물론 많은 불합리한 방법이 있습니다).

당신이 관계를 단방향으로 만들기를 원한다면 (매우 이상하게 보입니다. 엔티티 A가 엔티티 B와 관계가있는 상황을 상상할 수 없습니다. B는 A와 관계가 없으므로 데이터 모델이 잘못되었다고 의심하는 경우), 여전히 매핑 테이블을 사용합니다. DIRECTION (즉 'A -> B'또는 'B -> A')을 저장하는 매핑 테이블에 다른 열을 추가하는 것이 좋습니다.