복붙노트

[MONGODB] MongoDB를 정상화, 외래 키 및 가입

MONGODB

MongoDB를 정상화, 외래 키 및 가입

내가 일 MongoDB를에 정말 깊이 잠수하기 전에, 나는 내가 모든 여부에 그것으로 다이빙을해야하는지에 아주 기본적인 질문을 거라고 생각했다. 나는 NoSQL에와 기본적으로 경험이 없다.

나는 문서 데이터베이스의 장점 중 일부에 대해 조금 읽었다, 나는이 새로운 응용 프로그램에 대한, 그들은 정말 좋은 것 같아요. 항상 많은 객체의 유형 (m-에-m 관계의 많은)과 서브 클래스 등 즐겨 찾기, 의견을, 할 수있는 번거 로움 - 그것은 종류를 처리 할 수있는 고통입니다.

나는 또한이 매우 중첩 및 15 개 다른 테이블보다 훨씬 더 나은 문서로 변환 있기 때문에 SQL에서 정의하는 고통이 될 것이다 구조를 가지고있다.

그러나 나는 몇 가지에 대해 혼란 스러워요.

해결법

  1. ==============================

    1.MongoDB를 서버 측 외래 키 관계를 지원하지 않습니다 정상화도 좋습니다. 이 성능을 향상시키고 외부 키가 완전히 불필요한 것, 가능하면 당신은 부모 객체 내에서 자식 개체를 포함해야한다. 그 때문에 다른 컬렉션 참조 개체 수 DBRef라는 특별한 구조가, 그것은 항상 가능한 것은 아니다 말했다. DB 객체를 읽을 수있는 추가 쿼리를 만들어 가지고 있지만 외래 키 참조의 종류 수 있기 때문에 이것은 그리 빠른 다음 수 있습니다.

    MongoDB를 서버 측 외래 키 관계를 지원하지 않습니다 정상화도 좋습니다. 이 성능을 향상시키고 외부 키가 완전히 불필요한 것, 가능하면 당신은 부모 객체 내에서 자식 개체를 포함해야한다. 그 때문에 다른 컬렉션 참조 개체 수 DBRef라는 특별한 구조가, 그것은 항상 가능한 것은 아니다 말했다. DB 객체를 읽을 수있는 추가 쿼리를 만들어 가지고 있지만 외래 키 참조의 종류 수 있기 때문에 이것은 그리 빠른 다음 수 있습니다.

    여전히 수동으로 참조를 처리해야합니다. 만 존재하는 경우에는 DB는 참조의 목표는 더 이상 존재하지 않는 경우 참고 문헌을 찾아 그들을 제거하기 위해 모든 문서를 가지 않을 것이다, 볼 것이다 DBRef를 찾는 동안. 그러나 나는 그렇게하지 어려운 정말, 더 이상 수집, 당 하나의 쿼리를 필요로 책을 삭제 한 후 모든 참조를 제거 생각합니다.

    스키마가 더 복잡 경우, 아마 당신은 관계형 데이터베이스가 아닌되는 NoSQL을 선택해야합니다.

    문서 디자인을 MongoDB를위한 : MongoDB의 데이터베이스를 설계에 대한 책도 있습니다

    UPDATE이 책은 위의 다른 꽤 많이 있습니다 아직 때문에 MongoDB를의 인기를 더 이상 사용할 수 없습니다. 이러한 링크가 변경 될 수 있기 때문에 그 일부를 찾을 수있는 문제가 아니다, 그래서 나는 아마존 쇼 여러 페이지에 간단한 검색을 모두 연결하지 않습니다.

    더 구체적인 내용과 예제 '사용 설명서 참조'와 DBREFS의 MongoDB의 매뉴얼 페이지를 참조하십시오

  2. ==============================

    2.위, @TomaaszStanczak 상태

    위, @TomaaszStanczak 상태

    정규화는 몽고 낙담하지 않습니다. 명확하게하기 위해, 우리는 두 개의 데이터 개체가 가질 수있는 관계의 두 개의 근본적으로 다른 유형에 대해 말하고있다. 하나, 하나의 자식 개체는 부모 객체에 의해 독점적으로 소유하고 있습니다. 이러한 유형의 관계에서, 몽고 방법 퍼가이다.

    관계의 다른 클래스에서 두 기관은 독립적으로 존재 - 독립적 인 수명과 관계가있다. 몽고는 이러한 유형의 관계가 존재하지 않았다는 것을 희망하고 대처하는 방법을 정확하게에 실망스럽게도 침묵이다. 임베딩는 해결책이 아닙니다. 정규화는 낙담하거나 권장하지 않습니다. 몽고는 당신에게 그것을 다루는 두 가지 메커니즘을 제공합니다; 설명서 (두 테이블을 결합 외래 키 제약 조건을 가진 키하여 유사한) 심판 및 DBRef (같은 짓을 다른, 약간 더 구조화 된 방식으로). 이 사용하는 경우 SQL 데이터베이스는 승리.

  3. ==============================

    3.먼저 "문서 참조"를 작성하기 전에 데이터베이스 문서 설계를 최적화 고려해야하는 "정규화"몽고 낙담하지 않지만 : 토마스와 프랜시스 모두의 대답은 좋은 충고가 포함되어 있습니다. DBREFS 그가 언급하지만 같은 "마법의 탄환"이 아니며 유용하게 추가 처리를 필요로 토마스 언급했다.

    먼저 "문서 참조"를 작성하기 전에 데이터베이스 문서 설계를 최적화 고려해야하는 "정규화"몽고 낙담하지 않지만 : 토마스와 프랜시스 모두의 대답은 좋은 충고가 포함되어 있습니다. DBREFS 그가 언급하지만 같은 "마법의 탄환"이 아니며 유용하게 추가 처리를 필요로 토마스 언급했다.

    어떤 MongoDB는 버전 3.2과 같이, 지금 가능하면 상기 룩업 $ 집약 파이프 라인 스테이지 연산자를 사용하여 가입을하여 SQL 동등한 결과를 생성한다. 이러한 방식으로 당신은 "정규화"문서 구조를 가지고 있지만, 여전히 통합 된 결과를 생성 할 수 있습니다. 위해서는이 당신이 희망 의미 있고 독특한 둘 다 대상 컬렉션에서 고유 키를 생성 할 필요가 작동합니다. 이 필드에 고유 인덱스를 만들어 고유성을 적용 할 수 있습니다.

    $ 조회 사용법은 매우 간단합니다. https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#lookup-aggregation : 여기 문서에서보세요. 소스 컬렉션 집합체 () 메소드 (즉, "왼쪽"테이블)을 실행. 매개 변수에서 대상 콜렉션 (즉, "오른쪽"표)이다. localField 파라미터는 소스 컬렉션의 필드 (즉, "외래 키")가 될 것이다. foreignField 파라미터 대상 컬렉션에서 정합 필드 것이다.

    지금까지 고아 문서로, 귀하의 질문에서 당신이 MongoDB를 버전 3.2로 등 다시 제약의 전통적인 RDBMS 세트, 계단식 삭제에 대해 생각하는 가정 것, 문서 검증을위한 기본 지원이있다. MongoDB를에 제약 조건을 적용하는 방법이 StackOver 기사에서보세요? JohnnyHK에서, 두 번째 대답 봐

    Packt 출판사는 MongoDB를 좋은 책의 무리가 있습니다. (전체 공개 : 나는 그들 중 몇 가지를 썼다.)

  4. from https://stackoverflow.com/questions/5841681/mongodb-normalization-foreign-key-and-joining by cc-by-sa and MIT license