code

MongoDB에서 다 대다 관계를 구성하는 방법

codestyles 2020. 12. 13. 09:33
반응형

MongoDB에서 다 대다 관계를 구성하는 방법


두 개의 테이블 / 컬렉션이 있습니다. 사용자 및 그룹. 사용자는 여러 그룹의 구성원이 될 수 있으며 사용자는 여러 그룹의 소유자가 될 수도 있습니다. 관계형 데이터베이스에는 UserID 열, GroupID 열 및 IsOwner 열이있는 UserGroups라는 세 번째 테이블이있을 것입니다.

저는 MongoDB를 사용하고 있으며 문서 데이터베이스에서 이러한 종류의 관계에 대해 다른 접근 방식이 있다고 확신합니다. 사용자 테이블 내에 그룹 및 소유자로서의 그룹 목록을 두 개의 ObjectID 배열로 포함해야합니까? 또한 그룹 테이블의 구성원 및 소유자 목록을 두 개의 배열로 저장하여 관계 정보가 중복되는 관계를 효과적으로 미러링해야합니까?

아니면 브리징 UserGroups 테이블이 다 대다 관계에 대한 문서 데이터베이스의 합법적 인 개념입니까?

감사


내가 본 것과 현재 사용하는 것은 각 문서에 노드 ID가있는 임베디드 배열입니다.

따라서 문서 user1에는 속성 그룹이 있습니다. [id1, id2]

문서 group1에는 속성 사용자 [user1]이 있습니다. 문서 group2에는 속성 사용자 [user1]도 있습니다.

이렇게하면 그룹 개체를 얻고 관련된 모든 사용자를 쉽게 선택할 수 있으며 사용자도 마찬가지입니다.

개체를 만들고 업데이트 할 때 약간 더 많은 작업이 필요합니다. 2 개의 개체가 관련되어 있다고 말하면 두 개체를 모두 업데이트해야합니다.

MongoDB에는 개념 DBReferences도 있으며 드라이버에 따라 문서를 검색 할 때 참조 된 객체를 자동으로 가져옵니다.

http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef


관심있는 사람을 위해 mongoDB 블로그에 게시 된 아주 좋은 기사를 만났습니다. 6 MongoDB 스키마 설계를위한 경험 규칙 . 이 기사에는 세 부분이 있으며 세 부분을 모두 읽은 후에는 잘 이해할 수 있습니다.


예를 들어 다 대다 관계를 이해합시다.

  • 저자에게 책
  • 학생에서 교사로

저자와 책은 몇 개에서 몇 개 정도의 관계이므로 다른 사람의 문서 안에 여러 책이나 저자를 둘 수 있습니다. 학생도 교사에게도 마찬가지입니다. 중복의 위험에 임베드 할 수도 있습니다. 그러나이를 위해서는 각 학생이 삽입하기 전에 시스템에 교사가 있어야하며 그 반대의 경우도 마찬가지입니다. 응용 프로그램 논리가 항상이를 허용하지 않을 수 있습니다. 즉, 자식 개체가 존재하려면 부모 개체가 있어야합니다.

그러나 다 대다 관계가있는 경우 두 개의 컬렉션을 사용하고 진정한 연결을 갖습니다.

참고 URL : https://stackoverflow.com/questions/4839881/how-to-organise-a-many-to-many-relationship-in-mongodb

반응형