English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB 데이터 모델링

MongoDB에서의 데이터는 flexible schema.documents와 동일한 컬렉션에서 동일한 컬렉션에서의 문서. 문서는 동일한 필드셋이나 컬렉션의 공통 필드를 가지지 않아도 됩니다. 문서는 다른 데이터 유형을 포함할 수 있습니다.

데이터 모델 설계

MongoDB는 두 가지 유형의 데이터 모델을 제공합니다:嵌入式 데이터 모델과 정규화된 데이터 모델. 필요에 따라 문서를 준비할 때 이 두 가지 모델 중 하나를 사용할 수 있습니다.

데이터 모델 설계

이 모델에서는 모든 관련 데이터(데이터 삽입)를 하나의 문서에 모을 수 있습니다. 이를 통해 비정규화된 데이터 모델이라고도 합니다.

예를 들어, 우리가 세 가지 다른 문서(Personal_details, Contact, Address)에서 직원의 상세 정보를 가져오는 경우, 모든 세 가지 문서를 하나의 문서에 삽입할 수 있습니다. 예를 들어, 다음과 같이:

{
	_id:,
	직원 번호: "10025AE336"
	개인 상세 정보: {
		이름: "Radhika"
		성: "Sharma"
		생일: "1995-09-26"
	}
	연락처: {
		e-메일: "[email protected]"
		전화: "9848022338"
	}
	주소: {
		도시: "Hyderabad",
		지역: "Madapur",
		상태: "Telangana"
	}
}

정규화된 데이터 모델

이 모델에서는 원본 문서의 서브 문서를 참조할 수 있는 참조를 사용할 수 있습니다. 예를 들어, 다음과 같은 문서를 정규화된 모델로 다시 작성할 수 있습니다:

직원:

{
	_id: "ObjectId"101>
	직원 번호: "10025AE336"
}

개인 상세 정보:

{
	_id: "ObjectId"102>
	empDocID: "ObjectId"101"
	이름: "Radhika"
	성: "Sharma"
	생일: "1995-09-26"
}

연락처:

{
	_id: "ObjectId"103>
	empDocID: "ObjectId"101"
	e-메일: "[email protected]"
	전화: "9848022338"
}

주소:

{
	_id: "ObjectId"104>
	empDocID: "ObjectId"101"
	도시: "Hyderabad",
	지역: "Madapur",
	상태: "Telangana"
}

MongoDB에서 아키텍처를 설계할 때의 주의사항

  • 사용자 요구에 따라 아키텍처를 설계합니다.

  • 그들을 함께 사용하면 하나의 문서에 결합합니다. 그렇지 않으면 분리합니다(하지만 필요하지 않은 연결을 보장하십시오).

  • 데이터를 복사합니다(하지만 제한이 있습니다), 왜냐하면 디스크 공간이 계산 시간보다 저렴하기 때문입니다.

  • 쓰기 시에 연결을 수행하며, 읽기 시에 연결을 수행하지 않습니다.

  • 가장 일반적인 사용 사례를 위해 계획을 최적화하십시오.

  • 아키텍처에서 복잡한 합성을 수행합니다.

온라인 예제

고객이 블로그에/웹 사이트는 데이터베이스 설계를 수행하고 RDBMS와 MongoDB 모델 설계 간의 차이점을 확인합니다. 웹 사이트는 다음과 같은 요구 사항을 가지고 있습니다.

  • 각 포스트는 독특한 제목, 설명 및 웹 사이트 주소를 가지고 있습니다.

  • 각 포스트는 하나나 여러 가지 태그를 가질 수 있습니다.

  • 각 포스트는 게시자의 이름과 좋아요의 총 수를 가지고 있습니다.

  • 각 포스트는 사용자가 제공한 댓글, 그들의 이름, 메시지, 데이터 시간 및 좋아요를 포함하고 있습니다.

  • 각 포스트에 대해, 0개나 많이나 있는 댓글이 있을 수 있습니다.

RDBMS 아키텍처에서는, 위 요구사항을 충족하기 위해 최소한 세 개의 테이블을 가질 것입니다.

MongoDB 모델에서는, 포스트 컬렉션과 다음 구조를 가질 것입니다.-

{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [	
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      }
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   }
}

따라서, 데이터를 표시할 때, RDBMS에서는 세 개의 테이블을 연결해야 하지만, MongoDB에서는 데이터가 단 하나의 컬렉션에서 표시됩니다.