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.
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.