MongoDB 數(shù)據(jù)建模

MongoDB中的數(shù)據(jù)在同一集合中具有靈活的模式 schema.documents 。同一集合中的文檔。它們不需要具有相同的字段集或集合中的結構公共字段,文檔可能包含不同類型的數(shù)據(jù)。

數(shù)據(jù)模型設計

MongoDB提供兩種類型的數(shù)據(jù)模型:嵌入式數(shù)據(jù)模型和規(guī)范化數(shù)據(jù)模型。根據(jù)需求,您可以在準備文檔時使用這兩個模型中的任何一個。

嵌入式數(shù)據(jù)模型

在此模型中,您可以將所有相關數(shù)據(jù)(嵌入)在一個文檔中,這也稱為非規(guī)范化數(shù)據(jù)模型。

例如,假設我們在三個不同的文檔(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: "radhika_sharma.123@gmail.com",
		phone: "9848022338"
	},
	Address: {
		city: "Hyderabad",
		Area: "Madapur",
		State: "Telangana"
	}
}

標準化數(shù)據(jù)模型

在此模型中,您可以使用引用來引用原始文檔中的子文檔。例如,您可以將以下文檔以規(guī)范化模型重寫為:

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: "radhika_sharma.123@gmail.com",
	phone: "9848022338"
}

Address:

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

在MongoDB中設計架構時的注意事項

  • 根據(jù)用戶要求設計架構。

  • 如果將它們一起使用,則將它們組合到一個文檔中。否則,將它們分開(但請確保不需要連接)。

  • 復制數(shù)據(jù)(但有限制),因為磁盤空間比計算時間便宜。

  • 在寫入時進行聯(lián)接,而不是在讀取時進行聯(lián)接。

  • 針對最常見的用例優(yōu)化您的方案。

  • 在架構中進行復雜的聚合。

在線示例

假設客戶需要為其博客/網(wǎng)站進行數(shù)據(jù)庫設計,并查看RDBMS與MongoDB模式設計之間的區(qū)別。網(wǎng)站具有以下要求。

  • 每個帖子都有唯一的標題,描述和網(wǎng)址。

  • 每個帖子可以有一個或多個標簽。

  • 每個帖子都有其發(fā)布者的姓名和點贊的總數(shù)。

  • 每個帖子都有用戶提供的評論,以及他們的姓名,消息,數(shù)據(jù)時間和點贊。

  • 在每個帖子上,可以有零個或多個評論。

在RDBMS架構中,用于上述要求的設計將至少具有三個表。

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
      }
   ]
}

因此,在顯示數(shù)據(jù)時,在RDBMS中,您需要連接三個表,而在MongoDB中,數(shù)據(jù)將僅從一個集合中顯示。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清