2011-10-30 3 views
1

나는 약간의 이상한 이유로 나를 혼란시키는 아주 기본적인 질문을 가지고있다.one-to-many 대 many-to-many 연관 디자인과 이점

두 개의 테이블이 있습니다. 하나는 테이블 Pages이고 다른 하나는 메뉴입니다. 궁금 해서요, 매핑을 위해 다른 테이블을 사용하면 어떤 이점이 있습니까? 내가 볼 수있는 유일한 차이점은 내가 검색 방법입니다

Two implementations

: 아래는 내가 생각하고있는 두 가지 구현입니다. 첫 번째 구현 예 : 예 :

a) 특정 메뉴의 모든 페이지를 원한다면 특정 메뉴 이름의 모든 page_ids를 쿼리하고 테이블 Pages의 ID와 조인 할 것입니다. (이것이 내가이 구현이 좀 더 느린 것이라고 생각하는 이유이다).

b) 특정 페이지의 모든 메뉴를 원한다면 특정 페이지의 page_id가있는 모든 메뉴를 검색합니다.

두 번째 구현 방식은 더 일반적이며 간단합니다 (더 많은 조인이 필요함).

두 번째 구현은 더 빠르기 때문에 (위에서 언급 한 것처럼 메뉴 이름을 검색하는 대신 색인 인 id 사이에서만 쿼리하기 때문에) 더 빠르기 때문에 생각합니다.)).

다른 특별한 이유가 있습니까? 이 두 디자인은 그들이 성취 할 수있는 것과 동일한 것입니까, 아니면 첫 번째 디자인에 다른 제한이 있습니까? 항상 두 번째 디자인을 선택해야합니까?

+0

첫 번째 구현에서 하나의 메뉴는 하나의 페이지에만 속할 수 있으므로 다 대다가 아닙니다. – Andomar

답변

4

두 옵션이 동일하지 않습니다. 후자는 다 대다 (many-to-many) 디자인에서 사용하기위한 올바른 선택이다. 조인 테이블을 사용하면 많은 페이지 (A, B, C)와 많은 메뉴 (1,2,3)를 가질 수 있으며 메뉴 세트를 페이지 집합과 연결할 수 있습니다 (A1, A2, A3, B1을 산출 함). , B2, B3, C1, C2, C3)를 포함한다.

첫 번째 디자인에서는 특정 메뉴에 연결된 페이지가 1 개만 있다고 가정합니다. 메뉴 1은 한 페이지에만 연결할 수 있습니다 (A, B 또는 C가됩니까?). 동일한 메뉴를 여러 페이지와 연결하려면 메뉴 테이블에서 각 관련 페이지에 대해 한 행을 가져야합니다.

1

첫 번째 구현은 1 대 다수, 많지 않음을 나타냅니다. 두 번째 구현은 페이로드 (payload)를 가진 많은 것에서 많은 것 (id : 일반적으로 id가 필요하지 않음)입니다.

대다수는 n 개의 다른 항목에 매핑 된 n 개의 항목을 네비게이션 할 수 있음을 의미합니다. 1 to many는 하나의 항목 만 n 개의 항목으로 매핑한다는 것을 의미합니다.

많은 항목이 필요한 경우 두 번째 구현에서만 수행 할 수 있습니다. 1에서 많은 것이 필요한 경우 첫 번째 방법으로 수행됩니다.

1

페이지와 메뉴는 다 대다 관계입니다. 문제는 관계의 간단한 사실 이외에 추적해야하는 관계에 대한 정보가 있습니까?

예를 들어 잡지를 발행 한 경우 사람이 < -> M2M 인 잡지 관계를 가질 수 있습니다. - 사람들은 여러 잡지를 구독 할 수 있었고 잡지에는 여러 명의 구독자가있을 수있었습니다. 하지만 시작일, 만료일 등 추적하고자하는 잡지와 사람의 교차로에 대한 정보가 있습니다. 교차점 테이블을 사용하면 이러한 위치를 지정할 수 있습니다.

나는 이런 종류의 일을 얼마 동안 해왔다. 그리고 교차로가 존재하는 것 외에는 아무것도 기록 할 수없는 M2M이있는 경우를 생각해 볼 수있다. 처음에 구현되었습니다. 그러나 거의 모든 경우에 사용자는 나중에 관계에 대한 추가 정보가 필요한 기능 향상을 요청했습니다.

그래서 항상 교차를 사용합니다.