/ / Làm việc với các mối quan hệ dữ liệu trong MongoDB

Làm việc với các mối quan hệ dữ liệu trong MongoDB

MongoDB là một cơ sở dữ liệu tài liệu và không duy trì mối quan hệ giữa các tài liệu như cơ sở dữ liệu quan hệ như PostgreSQL.

Tuy nhiên, MongoDB cho phép bạn tạo mối quan hệ giữa các tài liệu. Các mối quan hệ này có thể được mô hình hóa thông qua các phương pháp tiếp cận nhúng hoặc tham chiếu. Chúng ta hãy xem xét kỹ hơn.

Mối quan hệ nhúng so với Mối quan hệ Tham chiếu

Trong cách tiếp cận nhúng, một tài liệu được chèn trực tiếp vào bên trong một tài liệu khác, dẫn đến dữ liệu được lồng vào nhau. Quá trình này còn được gọi là “không chuẩn hóa”.

Mặt khác, phương pháp tham chiếu sử dụng các tham chiếu tài liệu để trỏ từ tài liệu này sang tài liệu khác. Cách tiếp cận này còn được gọi là “bình thường hóa”.

MongoDB: Mối quan hệ một-một với tài liệu nhúng

Bạn có thể tạo mối quan hệ 1-1 giữa các tài liệu bằng cách sử dụng phương pháp nhúng. Mối quan hệ này xảy ra khi một đối tượng tài liệu chỉ có thể liên quan đến một tài liệu khác.

Hãy xem xét một cơ sở dữ liệu sinh viên. Cơ sở dữ liệu này chứa các bộ sưu tập sinh viên và địa chỉ với các tài liệu sau.

// Student Document
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
};
// Address Document
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"city": "Hobiton",
}

Trong cơ sở dữ liệu này, một học sinh chỉ được phép có một địa chỉ. Để truy xuất địa chỉ, bạn sẽ cần truy vấn bộ sưu tập địa chỉ bằng tên của học sinh.

Liên quan: Cách tạo Cơ sở dữ liệu và Bộ sưu tập trong MongoDB

Trong trường hợp địa chỉ được sử dụng song song với các chi tiết khác, chẳng hạn như tên học sinh, bạn sẽ phải truy vấn cơ sở dữ liệu nhiều lần. Nhược điểm của điều này là số lượng thao tác đọc cao và do đó hiệu suất truy vấn thấp.

Sử dụng phương pháp nhúng, bạn có thể chèn dữ liệu địa chỉ ngay vào tài liệu sinh viên và chỉ sử dụng một truy vấn duy nhất để lấy dữ liệu.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"address": [{
"street": "Bagshot Row",
"city": "Hobiton"
}],
};

Để truy xuất địa chỉ thông qua tên học sinh, sử dụng truy vấn này.

db.student.findOne({"studentName":"Frodo Baggins"}, {"address":1})

Ảnh chụp màn hình thiết bị đầu cuối hiển thị kết quả từ truy vấn mongoDB

Mối quan hệ một-nhiều với tài liệu nhúng trong MongoDB

Hãy xem xét một tình huống trong đó một học sinh có nhiều địa chỉ. Mối quan hệ giữa sinh viên và các địa chỉ trở thành một-nhiều.

Mô hình nhúng cho phép bạn thêm nhiều địa chỉ vào tài liệu sinh viên. Như trong mối quan hệ một-một sử dụng tài liệu nhúng, cách tiếp cận này có hiệu suất truy vấn tương đối cao.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"address": [
{
"street": "Bagshot Row",
"city": "Hobiton"
},
{
"street": "Another Bagshot Row",
"city": "Hobiton2"
},
]
};

Truy vấn dưới đây sẽ trả về địa chỉ của tên sinh viên được chỉ định.

db.student.findOne({studentName: “Frodo Baggins”}, {address: 1})

Cửa sổ đầu cuối hiển thị đầu ra từ truy vấn MongoDB

Liên quan: Cách tạo tài liệu trong MongoDB

Bây giờ, nếu bạn có nhiều địa chỉ hơn và tiếp tục thêm chúng vào trường địa chỉ, tài liệu có thể trở nên lộn xộn khá nhanh. Một giải pháp là sử dụng tài liệu tham khảo.

MongoDB: Mối quan hệ một-nhiều với tham chiếu tài liệu

Bạn cũng có thể lập mô hình mối quan hệ một-nhiều bằng cách sử dụng phương pháp tham chiếu. Trong mô hình dữ liệu này, dữ liệu sinh viên và địa chỉ sẽ được duy trì trong các bộ sưu tập riêng biệt. Để liên hệ sinh viên với địa chỉ của họ, hãy thêm trường chứa ID địa chỉ vào tài liệu sinh viên.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"address": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};

Lấy chi tiết địa chỉ của sinh viên bao gồm việc tìm nạp các ID địa chỉ từ tài liệu sinh viên và sử dụng các ID đó để tìm nạp các địa chỉ thực từ bộ sưu tập.

const student = db.users.findOne({"name":"Frodo Baggins"},{"address":1})
const addresses = db.address.find({"_id":{"$in":student["address_ids"]}})

Cửa sổ đầu cuối hiển thị kết quả từ truy vấn MongoDB

Lựa chọn giữa các phương pháp tiếp cận được nhúng và phương pháp tham chiếu

Cả mô hình nhúng và mô hình tham chiếu đều có ưu và nhược điểm, và bạn sẽ phải cân nhắc một số điều trước khi đưa ra lựa chọn. . Đối với người mới bắt đầu, bạn sẽ cần phải xem xét trường hợp sử dụng. Nếu dữ liệu chỉ liên quan đến một tài liệu, thì nhúng có thể là lựa chọn tốt nhất của bạn.

Để tạo mối quan hệ một-nhiều, bạn có thể sử dụng mô hình tham chiếu hoặc mô hình nhúng. Việc tham chiếu dẫn đến một tài liệu rõ ràng và nhất quán vì bạn chỉ thêm ID tham chiếu của tài liệu mà bạn muốn liên quan.

Tuy nhiên, số lượng thao tác đọc cần thiết để truy xuất dữ liệu được kết nối là tương đối cao và có thể ảnh hưởng đến hiệu suất. Nhúng tài liệu có thể tăng hiệu suất, nhưng với nhiều tài liệu lồng vào nhau, bạn có thể kết thúc với một bộ sưu tập bị tắc nghẽn.

Do đó, việc chọn cách triển khai các mối quan hệ dữ liệu trong tài liệu của bạn là hoàn toàn tùy thuộc vào bạn. Xem xét cách bạn sẽ sử dụng tài liệu, mức hiệu suất truy vấn mà bạn đang hướng tới và những đánh đổi mà bạn sẵn sàng thực hiện.


Cơ sở dữ liệu cũ với ngăn kéo bằng gỗ
Mô hình hóa dữ liệu khác nhau như thế nào trong MongoDB?

Xem xét một cách tiếp cận khác đối với cơ sở dữ liệu? Đây là cách hoạt động của mô hình dữ liệu trong MongoDB.

Đọc tiếp


Giới thiệu về tác giả

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *