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