복붙노트

[MONGODB] 어떻게하여 MongoDB에서이 스키마를 구현해야합니까?

MONGODB

어떻게하여 MongoDB에서이 스키마를 구현해야합니까?

나는 추적 스크립트를 작성하기 위해 노력하고있어 나는 데이터베이스가 작동하는 방법을 알아내는에 문제가 있어요.

MySQL의에서 나는 해당 외모와 유사한 테이블을 만들 것

User:
   username_name: string

Campaign:
   title: string
   description: string
   link: string

UserCampaign:
   user_id: integer
   camp_id: integer

Click:
   os: text
   referer: text
   camp_id: integer
   user_id: integer

내가 할 수 있어야합니다 :

나는의 라인을 따라 뭔가를 할 경우

User {
     Campaigns: [
         {
           Clicks: []
         }
     ]
}

나는이 문제에 실행 :

해결법

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

    1.OK, 난 당신이 기본 "종류"에 이것을 깰 필요가 있다고 생각합니다.

    OK, 난 당신이 기본 "종류"에 이것을 깰 필요가 있다고 생각합니다.

    당신은 두 개의 "엔터티"스타일 개체가 :

    당신은 하나의 "지도"스타일 객체를 가지고 :

    당신은 하나의 "트랜잭션"스타일 객체를 가지고 :

    1 단계 : 엔티티

    쉬운 사람과하자의 시작 : 사용자 및 캠페인. 이 진정으로 두 개의 물체도, 둘 중 하나는 정말 그 존재를 다른에 따라 달라집니다. 두 사이에 암시 적 계층 구조도 있습니다 : 사용자는 사용자에 속하는 캠페인을하지 캠페인에 속하는 수행도 않습니다.

    이 같은 두 개의 최상위 객체가있을 때, 그들은 일반적으로 자신의 콜렉션을 적립하실 수 있습니다. 그래서 당신은 사용자 수집 및 Camapaigns 수집을 할 것입니다.

    2 단계 : 매핑

    UserCampaign는 현재 N-에-M 매핑을 나타내는 데 사용됩니다. 당신이 N 대 1 매핑이있을 때 지금, 일반적으로, 당신은 N-에-M 매핑, 그러나 1의 N의 내부를 넣을 수 있습니다, 당신은 일반적으로 "쪽을 선택"에 있습니다.

    이론적으로, 당신은 다음 중 하나를 수행 할 수 있습니다 :

    개인적으로, 나는 # 1을 할 것입니다. 당신은 아마 방법은 더 많은 사용자가 캠페인을, 당신은 아마 짧아집니다 배열을 넣고 싶다.

    3 단계 : 트랜잭션

    클릭은 정말 완전히 다른 짐승이다. 캠페인 "에 속하는", 클릭 사용자 "에 속하는"클릭 수 : 오브젝트의 측면에서 다음을 생각할 수. 따라서, 이론적으로, 당신은 단지 클릭 이러한 개체 중 하나의 일부 저장할 수 있습니다. 그것은 사용자 또는 캠페인 아래에 속한다는 것을 클릭 수를 생각하기 쉽다.

    당신이 정말로 깊이 파고 경우에, 위의 단순화는 정말 결함이있다. 시스템에서 클릭 정말 중앙 개체입니다. 사실, 당신도 사용자 및 캠페인은 정말 그냥 클릭 '과 관련 "되어 있다고 할 수 있습니다.

    당신이 요구하고있는 질문 / 쿼리를 살펴 보자. 그 질문의 모든 실제로 클릭을 중심으로. 사용자 및 캠페인은 데이터의 중앙 개체 수없는 수, 클릭 수 있습니다.

    또한, 클릭 수는 시스템에서 가장 풍부한 데이터가 될 것입니다. 당신은 다른 것보다 훨씬 더 많은 클릭이 될 것입니다.

    이 같은 데이터에 대한 스키마를 설계 할 때 가장 큰 장애이다. 때때로 당신은 그들이 가장 중요한 것은 없을 때 "부모"물체를 밀어해야합니다. 간단한 전자 상거래 시스템을 구축 상상해보십시오. 이 명령은 사용자 만 주문 "에 속하는"그것 "최상위"개체로 시스템에 너무 중앙거야되는 것이 분명하다.

    그것을 포장

    당신은 아마 세 가지 컬렉션을 할 것입니다 :

    이 쿼리의 모든 요구 사항을 만족해야합니다 :

    db.clicks.find()
    

    db.clicks.group () 또는지도-줄 실행합니다.

    db.clicks.find ({USER_ID : ㅋ ㅋ는})이 (즉, 의미가있는 경우) 사용자 및 캠페인에 모두 클릭 ID를 밀어 수도 있습니다.

    당신은 많은 수와 클릭 수를 많이있는 경우, 당신은 정말 당신이 가장 실행 쿼리를 분석해야합니다 것을 참고하시기 바랍니다. 당신은 당신이 자주 실행하고 싶을 것이다, 그래서 모든 필드에 인덱스 할 수없는지도-감소 이러한 쿼리에 대해 "롤업"데이터에.

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

    2.내가 여기에서 보는 가장 큰 문제는이 문서 지향 데이터베이스에서 관계형 데이터베이스의 개념을 적용하려고하는 것입니다. 둘 사이의 주요 차이점은없는 NoSQL 데이터베이스의 스키마 또는 구조에 대한 것이 아니라 수집과 문서에 대해 걱정하지 않아도됩니다.

    내가 여기에서 보는 가장 큰 문제는이 문서 지향 데이터베이스에서 관계형 데이터베이스의 개념을 적용하려고하는 것입니다. 둘 사이의 주요 차이점은없는 NoSQL 데이터베이스의 스키마 또는 구조에 대한 것이 아니라 수집과 문서에 대해 걱정하지 않아도됩니다.

    SQL에서와 같이 NOSQL의 많은 구현에 참여의 아무 개념이없는 것을 이해하는 것이 매우 중요 / 중요합니다. 이 방법 당신은 당신이 나중에 접착제 많은 일을 할 컬렉션에 걸쳐 데이터를 분산합니다. 또한 SQL DB를의 정상화와 같이 컬렉션에서 데이터를 확산하여 다른 이득이 없다. 당신은 데이터가 문서와 어떤 모음이에 적용되는 NoSQL DB 아래 구현에 대해 걱정하지의 부분이 무엇인지 생각해야합니다. 그래서 문제에 대한 대답은 당신이 질문을 모두 지원합니다 be..and 수 ...

    db.trackclicks ==> 컬렉션 trackclick = {           OS : XP,           사용자 : 홍길동,           캠페인 : {제목 : 테스트, 내용 : 테스트, 링크 : URL}           추천인 : google.com           }

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

    3.나는 다음과 같은 제안 그래서 :

    나는 다음과 같은 제안 그래서 :

    User {
         Campaigns: []
    }
    
    Clicks {
     user_id,
     camp_id
    }
    
  4. from https://stackoverflow.com/questions/4662530/how-should-i-implement-this-schema-in-mongodb by cc-by-sa and MIT license