MongoDB를 사용하여 콘텐츠 태깅을 구현하고 싶습니다. 관계형 데이터베이스에서 가장 좋은 방법은 콘텐츠 (예 : 'products')과 태그 테이블 사이에 다 대다 관계를 갖는 것입니다. 그러나 NoSQL 데이터베이스를 사용하는 것이 가장 좋은 방법은 무엇입니까?MongoDB로 태그하는 콘텐츠
"내용"문서의 태그 배열의 모든 태그를 넣어, 또는 문자열에 태그에 대한 참조를 넣어 더 좋을까요?
MongoDB를 사용하여 콘텐츠 태깅을 구현하고 싶습니다. 관계형 데이터베이스에서 가장 좋은 방법은 콘텐츠 (예 : 'products')과 태그 테이블 사이에 다 대다 관계를 갖는 것입니다. 그러나 NoSQL 데이터베이스를 사용하는 것이 가장 좋은 방법은 무엇입니까?MongoDB로 태그하는 콘텐츠
"내용"문서의 태그 배열의 모든 태그를 넣어, 또는 문자열에 태그에 대한 참조를 넣어 더 좋을까요?
MongoDB에서 n : m 관계가있는 대부분의 경우 참조하는 대신 포함을 사용해야합니다. 따라서 각 제품에 태그 이름이있는 "태그"배열을 사용하는 것이 좋습니다. 단일 제품을 살펴 보는 것이 시스템에서 가장 빈번한 유스 케이스라고 가정합니다. 이 디자인을 사용하면 단일 데이터베이스 쿼리로 태그 이름 목록이있는 제품을 사용자에게 표시 할 수 있습니다.
제품에 바인딩하지 않으려는 태그에 대한 추가 메타 데이터 (예 : 태그의 긴 텍스트 설명)가 필요하면 추가 태그 컬렉션을 만들 수 있습니다. 여기서 이름 필드 빠른 검색 및 중복 방지를위한 고유 색인을 얻습니다. 사용자가 태그 이름을 클릭하거나 가리키면 추가 쿼리를 사용하여 태그 세부 정보를 가져올 수 있습니다.
이 디자인에서 문제가되는 경우는 태그를 삭제하거나 이름을 바꾸려는 경우입니다. 그런 다음 태그가 포함 된 모든 제품을 수정해야합니다. 그러나 MongoDB는 SQL 데이터베이스와 같이 CASCADE ON DELETE를 사용하는 외래 키를 알지 못하기 때문에 서로 참조하는 문서가있을 때 항상이 문제가 발생합니다.
태그 이름 바꾸기는 제품 태그 배열에 이름 대신 objectID를 저장하여 쉽게 할 수 있습니다. 그러나 ID에는 사용자에게 쓸모가 없다는 단점이 있습니다. 제품 페이지를 표시하려면 태그의 이름을 가져와야합니다. 즉, 추가 데이터베이스 쿼리가 필요한 태그 컬렉션에서 모든 태그를 요청해야합니다.
나는 생각하지 않는다. "대부분의 경우"라고 말하면서 퍼가기와 링크에 관해 조언 할 때 좋습니다. 그것은 실제로 유스 케이스에 의존하며, 태그에 대해서는 임베딩이 정확하다는 것이 확실하지만, 다른 n : m 관계에 대해서는 임베딩이 끔찍할 수도 있습니다. –
@AsyaKamsky 무엇을 제안하나요? 이 경우 – mayankcpdixit
을 삽입하는 것이 좋습니다. 나는 "대부분의 경우"에 포함시키는 것이 옳다는 제안에 반대합니다. –
[Mongo에 게시 태그를 구현하는 방법] 가능한 복제본? (http://stackoverflow.com/questions/8455685/how-to-implement-post-tags-in-mongo) –