Bài 4: MongoDB - Mô hình dữ liệu - MongoDB

Đăng bởi: Admin | Lượt xem: 2431 | Chuyên mục: SQL


Dữ liệu trong MongoDB có một Schema linh động. Các Document trong cùng Collection không cần thiết phải có cùng tập hợp các trường hoặc cấu trúc, và các trường chung trong các Document của Collection có thể giữ các kiểu dữ liệu khác nhau.

1. Thiết kế mỗ hình dữ liệu :

MongoDb cung cấp 2 kiểu dữ liệu mô hình : Mô hình dữ liệu nhúng và mô hình dữ liệu chuẩn hoá. Tuỳ vào trường hợp, bạn có thể sử dụng model phù hợp trong quá trình chuẩn bị document
a. 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 đã được chuẩn hóa.
Ở ví dụ dưới đây, giả sử chúng ta lấy chi tiết nhân viên trong 3 documents khác nhau,cụ thể là : Personal_details, Contact và, Address. Bạn có thể nhúng hoàn toàn 3 documents như sau :
{
	_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"
	}
}
b. Mô hình dữ liệu chuẩn hóa
Ở 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: "radhika_sharma.123@gmail.com",
	phone: "9848022338"
}
Address:
{
	_id: <ObjectId104>,
	empDocID: " ObjectId101",
	city: "Hyderabad",
	Area: "Madapur",
	State: "Telangana"
}

2. Một số chú ý trong khi thiết kế Schema trong MongoDB

Thiết kế Schema của bạn theo yêu cầu của người dùng.
Tổ hợp các đối tượng vào trong một Document nếu bạn sẽ sử dụng các đối tượng đó cùng nhau. Nếu không, bạn nên phân biệt chúng (nhưng đảm bảo là không cần thiết sử dụng các Join).
Sao dữ liệu (nhưng có giới hạn) bởi vì không gian trên đĩa không là gì khi so sánh với thời gian tính toán.
Thực hiện Join trong khi ghi, đừng thực hiện trong khi đọc.
Tối ưu hóa Schema của bạn với các trường hợp thường xuyên sử dụng.
Thực hiện Aggregation phức tạp trong Schema đó.

Ví dụ

Giả sử, một khách hàng cần một thiết kế cơ sở dữ liệu cho trang blog của anh ta, và dưới đây, bạn xem các điểm khác nhau giữa thiết kế Schema của RDBMS và MongoDB. Website này có các yêu cầu sau:
Mỗi post có tiêu đề, miêu tả và Url duy nhất.
Mỗi post có thể có một hoặc nhiều tags.
Mỗi post có tên người đăng và tổng số like.
Mỗi post có các comment được cung cấp bởi người dùng cùng với tên, thông điệp, thời gian, và like của họ.
Trên mỗi post, có thể có 0 hoặc nhiều comment.
Trong thiết kế Schema của RDBMS cho các yêu cầu trên sẽ có tối thiểu ba bảng dữ liệu:
Trong khi trong thiết kế Schema của MongoDB sẽ chỉ có một Collection Post có cấu trúc như 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ì thế trong khi hiển thị dữ liệu, trong RDBMS bạn cần kết hợp ba bảng và trong MongoDB sẽ chỉ cần hiển thị từ một Collection.
Bài tiếp theo: MongoDB - Tạo Database >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!