MongoDB - Mô hình hóa dữ liệu

Dữ liệu trong MongoDB có schema.documents linh hoạt trong cùng một bộ sưu tập. Chúng không cần phải có cùng một tập hợp các trường hoặc cấu trúc Các trường chung trong tài liệu của tập hợp có thể chứa các loại dữ liệu khác nhau.

Thiết kế mô hình dữ liệu

MongoDB cung cấp hai loại mô hình dữ liệu: - Mô hình dữ liệu nhúng và Mô hình dữ liệu chuẩn hóa. Dựa trên yêu cầu, bạn có thể sử dụng một trong hai mô hình trong khi chuẩn bị tài liệu của mình.

Mô hình dữ liệu nhúng

Trong mô hình này, bạn có thể có (nhúng) tất cả dữ liệu liên quan vào một tài liệu duy nhất, nó còn được gọi là mô hình dữ liệu không chuẩn hóa.

Ví dụ: giả sử chúng tôi đang lấy thông tin chi tiết của nhân viên trong ba tài liệu khác nhau, cụ thể là Personal_details, Contact và, Address, bạn có thể nhúng cả ba tài liệu vào một tài liệu duy nhất như hình dưới đây -

{
	_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" } } 
      

Mô hình dữ liệu chuẩn hóa

Trong mô hình này, bạn có thể tham khảo các tài liệu phụ trong tài liệu gốc, sử dụng tài liệu tham khảo. Ví dụ: bạn có thể viết lại tài liệu trên trong mô hình chuẩn hóa dưới dạng:

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

Những lưu ý khi thiết kế Schema trong MongoDB

  • Thiết kế lược đồ của bạn theo yêu cầu của người dùng.

  • Kết hợp các đối tượng vào một tài liệu nếu bạn sẽ sử dụng chúng cùng nhau. Nếu không, hãy tách chúng ra (nhưng đảm bảo không cần nối).

  • Nhân bản dữ liệu (nhưng có giới hạn) vì dung lượng ổ đĩa rẻ so với thời gian tính toán.

  • Tham gia trong khi viết, không phải khi đọc.

  • Tối ưu hóa lược đồ của bạn cho các trường hợp sử dụng thường xuyên nhất.

  • Thực hiện tổng hợp phức tạp trong lược đồ.

Thí dụ

Giả sử một khách hàng cần thiết kế cơ sở dữ liệu cho blog / trang web của mình và xem sự khác biệt giữa thiết kế lược đồ RDBMS và MongoDB. Trang web có các yêu cầu sau.

  • Mỗi bài đăng đều có tiêu đề, mô tả và url duy nhất.

  • Mỗi bài đăng có thể có một hoặc nhiều thẻ.

  • Mỗi bài đăng đều có tên nhà xuất bản và tổng số lượt thích.

  • Mỗi bài đăng đều có nhận xét do người dùng đưa ra cùng với tên, tin nhắn, thời gian dữ liệu và lượt thích của họ.

  • Trên mỗi bài đăng, có thể không có hoặc nhiều bình luận.

Trong lược đồ RDBMS, thiết kế cho các yêu cầu trên sẽ có tối thiểu ba bảng.

Khi ở trong lược đồ MongoDB, thiết kế sẽ có một bài thu thập và cấu trúc sau:

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

Vì vậy, trong khi hiển thị dữ liệu, trong RDBMS bạn cần phải nối ba bảng và trong MongoDB, dữ liệu sẽ chỉ được hiển thị từ một bộ sưu tập.