2011-11-16 4 views
2

이 데이터베이스를 디자인하는 올바른 방법은 무엇입니까?다 대다 관계의 브리지 테이블에 세 번째 테이블 연결

나는 테이블라는 교사 및 악기라는 테이블 사이의 많은 관계로 많은이 : 여기

내가 내 테이블에 사용자가 설정 한 방법이다. 그 다음에는이 둘을 연결하는 브리지 테이블이 있습니다. 다른 테이블을 BRIDGE 테이블과 연관시키고 싶습니다. 악기/교사 조합을 의미합니다. 이 테이블에는 교사가 연주 할 수있는 수준 (즉, 초급, 중급, 고급)을 지정하는 3 개의 행이 있습니다. teacher_id, instrument_id 및 level_id를 갖기 위해 브리지 테이블을 설정해야하는 것처럼 보입니다. 그러나 이것이 일반적인 방법인지는 알 수 없습니다.

mysql과 cakephp를 사용하고 있으며 브리지 테이블에 추가 필드가있는 것에 관한 HABTM 연결에 대한 설명서에서 아무 것도 발견하지 못했습니다. 내가 제대로하고 있는지 확인하고 싶다.

답변

3

귀하의 데이터가 요구하는 것이고 그렇게하는 것처럼 들린다면 그걸로 가십시오.

  • 교사가에서 기타를 가르 칠 수 있다는 것을 의미
  • 을 level_id INSTRUMENT_ID teacher_id

    • : 당신이 언급 한 바와 같이

      기본적으로, 당신은 세 부분으로 키가 줄 초급 및 고급, 피아노 중급 및 초급, 그리고 다른 선생님이 피아노를 가르 칠 수있는 모든 수준과 오보에 초보자에서 ... 좋은 소리.


      또한, 브리지 테이블은 또한 intersectintersection 또는 테이블로 알려져있다.

    4

    +1 Matt Fenwick. 나는 당신이 당신의 외래 키 제약들에 대해 조금 조심하고 싶다고 덧붙일 것이다. 근본적으로 두 가지 옵션이 있습니다. 두 옵션 모두 기본 키 선택에 따라 매우 유사하게 보일 수 있습니다.

    번 옵션은 다음과 TEACHERINSTRUMENT 간의 단순 교차 잊고 teacher_id, instrument_idlevel_id 포함 된 복잡 교차로로 대체. 이 세 열은 모두이 교차 테이블의 (복합) 기본 키입니다. 이 옵션에서는 외래 키 제약 조건이 teacher_idinstrument_id (그리고 LEVEL 테이블의 외래 키이고 정수 또는 문자열 코드가 아닌 경우 실제로는 level_id)에 정의되어 있습니다.

    옵션이입니다 : TEACHERINSTRUMENT 사이의 간단한 교차을 유지하고 가르 칠 수있는 수준을 정의하는 하위 자식 테이블을 추가 (의는 그 상상력이 경우에도 TEACHER_INSTRUMENT를 호출하자). 이 하위 - 하위 테이블 (SKILL이라고 함)은 level_id이고 외래 키는 TEACHER_INSTRUMENT입니다. TEACHER_INSTRUMENT의 기본 키가 teacher_idinstrument_id의 조합 인 경우 SKILL 테이블에는 옵션 1과 동일한 세 개의 열이 있습니다. 이 옵션이 다른 이유는 무엇입니까?SKILL에서 외래 키 제약 조건이되지TEACHERINSTRUMENT에, 교차 테이블에 있어야합니다.

    왜 이것이 중요한가요? 옵션 1을 선택하는 경우 완전히 채워진 스킬 그리드를 얻으려면 추가 쿼리 로직이 필요합니다. 정의 할 수있는 참조 무결성 제약 조건이 없기 때문에 모든 스킬 레벨이 각 교사/기기 조합에 대해 채워지도록 할 수 있습니다 .

    반면에 옵션 2를 선택하면 누가 무엇을 사용할 수 있고 얼마나 잘 가르 칠 수 있는지에 대한 관심이 분리 될 수 있습니다.

    피하기 원하는 것은 교사/계기 관계가있는 테이블 하나와 그 관계를 (독립적으로) 반복하지만 기술 수준 세부 사항을 추가하는 것입니다. 그렇게하면 두 가지가 동기화되지 않을 위험이 있습니다.

    +0

    자세한 답변을 해주셔서 감사합니다. 두 대답 모두 매우 도움이되었습니다. –

    관련 문제