2013-04-15 3 views
1

내 모델 디자인에서는 Venues와 Ticket간에 직접적인 상관 관계가 없습니다. 개최지는 거래와 일대 다 관계이며 거래는 티켓과 일대 다 관계입니다.컬렉션간에 간접적 인 관계가있는 MongDB 쿼리

개최지 -> 비교 -> 티켓

이 아마 바보 같은 질문이지만, 나는 Tickets.findByVenueId() 작업을 갖고 싶어. 무엇을 쿼리하여 서버 측에서 모든 문제가 발생하는지 확인하는 가장 효율적인 방법은 무엇입니까? Ticket 모델에서 VenueId에 대한 어떤 종류의 참조가 필요합니까?

노드에서 MongooseJS를 사용하고 있습니다.

답변

1

분명히 각 티켓에 VenueId가 있습니다. 그것은 현장에서 티켓을 조회 할 수있는 유일한 "정상적인"방법입니다.

비정규 화가 될 수 있지만 때때로 NoSQL 데이터베이스에서이 작업을 수행해야하며,이 경우 필드에 대한 업데이트가 없어야하므로이 경우 "비정상적인"비정규 화가 아닙니다 (티켓은 발급 된 후 장소를 변경하지 않음), 부실 복사본 및 데이터 무결성에 대한 우려는 없습니다.

필요에 따라 더 복잡한 검색어를 사용하기 위해 다른 장소 데이터를 티켓 (예 : 도시 이름 또는 장소 용량)에 포함시킬 수도 있습니다. 분명히 이것은 "표준화 된"데이터베이스에서 멀리 떨어져 나가므로 필요에 따라 적용하십시오. 내가 그릴 첫 번째 큰 라인은 이러한 복사 된 필드를 업데이트해야하는 시점에 있습니다. 그 부분이 상당히 복잡해지기 때문입니다.

+0

감사합니다. Thilo. 나는 이것에 대해 많은 생각을 해왔고 장소에 하위 문서로 거래를 추가하는 것이 더 효율적인지, 그리고 티켓이 거래의 하위 문서가 될지 궁금해하고 있습니다. 그것에 관한 어떤 생각? – remotevision

+0

많은 티켓이 있다고 가정하면 확장되지 않습니다. 지금 당신이 가진 것이 좋은 것처럼 보입니다. – Thilo

관련 문제