MongoDB-데이터 모델링

MongoDB의 데이터에는 동일한 컬렉션에 유연한 schema.documents가 있습니다. 동일한 필드 세트 또는 구조를 가질 필요는 없습니다. 컬렉션 문서의 공통 필드에는 다른 유형의 데이터가 포함될 수 있습니다.

데이터 모델 디자인

MongoDB는 두 가지 유형의 데이터 모델을 제공합니다. — 임베디드 데이터 모델과 정규화 된 데이터 모델. 요구 사항에 따라 문서를 준비하는 동안 두 모델 중 하나를 사용할 수 있습니다.

임베디드 데이터 모델

이 모델에서는 비정규 화 된 데이터 모델이라고도하는 단일 문서에 모든 관련 데이터를 포함 (포함) 할 수 있습니다.

예를 들어, Personal_details, Contact 및 Address라는 세 가지 문서에서 직원의 세부 정보를 얻고 있다고 가정하면 아래에 표시된 것처럼 세 문서를 모두 단일 문서에 포함 할 수 있습니다.

{
	_id: 
      
       , Emp_ID: "10025AE336" Personal_details:{ First_Name: "Radhika", Last_Name: "Sharma", Date_Of_Birth: "1995-09-26" }, Contact: { e-mail: "[email protected]", phone: "9848022338" }, Address: { city: "Hyderabad", Area: "Madapur", State: "Telangana" } } 
      

정규화 된 데이터 모델

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

Employee:

{
	_id: <ObjectId101>,
	Emp_ID: "10025AE336"
}

Personal_details:

{
	_id: <ObjectId102>,
	empDocID: " ObjectId101",
	First_Name: "Radhika",
	Last_Name: "Sharma",
	Date_Of_Birth: "1995-09-26"
}

Contact:

{
	_id: <ObjectId103>,
	empDocID: " ObjectId101",
	e-mail: "[email protected]",
	phone: "9848022338"
}

Address:

{
	_id: <ObjectId104>,
	empDocID: " ObjectId101",
	city: "Hyderabad",
	Area: "Madapur",
	State: "Telangana"
}

MongoDB에서 스키마를 설계 할 때 고려할 사항

  • 사용자 요구 사항에 따라 스키마를 디자인합니다.

  • 함께 사용할 경우 개체를 하나의 문서로 결합합니다. 그렇지 않으면 분리합니다 (그러나 조인이 필요하지 않아야 함).

  • 컴퓨팅 시간에 비해 디스크 공간이 저렴하므로 데이터를 복제하십시오 (제한적 임).

  • 읽을 때가 아니라 쓰는 동안 조인하십시오.

  • 가장 빈번한 사용 사례에 맞게 스키마를 최적화합니다.

  • 스키마에서 복잡한 집계를 수행하십시오.

클라이언트가 자신의 블로그 / 웹 사이트에 대한 데이터베이스 디자인을 필요로하고 RDBMS와 MongoDB 스키마 디자인의 차이점을 확인한다고 가정합니다. 웹 사이트에는 다음과 같은 요구 사항이 있습니다.

  • 모든 게시물에는 고유 한 제목, 설명 및 URL이 있습니다.

  • 모든 게시물에는 하나 이상의 태그가있을 수 있습니다.

  • 모든 게시물에는 게시자 이름과 총 좋아요 수가 있습니다.

  • 모든 게시물에는 이름, 메시지, 데이터 시간 및 좋아요와 함께 사용자가 제공 한 댓글이 있습니다.

  • 각 게시물에는 0 개 이상의 댓글이있을 수 있습니다.

RDBMS 스키마에서 위의 요구 사항에 대한 설계에는 최소 3 개의 테이블이 있습니다.

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에서는 데이터가 하나의 컬렉션에서만 표시됩니다.