Các mối quan hệ được thực hiện như thế nào trong mongodb?

MongoDB là một cơ sở dữ liệu NoSQL không có lược đồ hoạt động với các tài liệu và bộ sưu tập. Không giống như cơ sở dữ liệu SQL, MongoDB có thể lưu trữ tài liệu ở định dạng JSON và cấu trúc của nó có thể thay đổi, do đó nhấn mạnh vào khả năng mở rộng cao của hệ thống và giảm độ phức tạp khi triển khai

đối tượng liên quan

Trong cơ sở dữ liệu quan hệ, các mối quan hệ thực thi tính toàn vẹn của dữ liệu. Nhưng trong MongoDB và các cơ sở dữ liệu NoSQL khác, không có mối quan hệ nào giữa các tài liệu. Vì vậy, tài liệu độc lập. Tuy nhiên, có một số cách tiếp cận để mô hình hóa các mối quan hệ giữa các tài liệu

Kịch bản. Gần đây tôi đang làm việc trên một ứng dụng ví điện tử và đây là một chức năng đơn giản để hiểu rõ hơn về nó. Ứng dụng này cho phép người dùng lưu trữ một hoặc nhiều thẻ ngân hàng trong ví điện tử của họ

Dựa trên mối quan hệ một-nhiều được đề cập trong kịch bản này, hãy cùng khám phá các cách tiếp cận khả thi để mô hình hóa các mối quan hệ trong MongoDB

Sử dụng tài liệu tham khảo

Phương pháp này được gọi là chuẩn hóa. Để thực hiện điều này, chúng tôi sẽ có hai bộ sưu tập riêng biệt cho người dùng và thẻ ngân hàng, như hình bên dưới

let bankCard = {
id:'',
number:''
}
let user: {
id:'',
name:'',
bankCard:'id'
}

Trong ví dụ này, ngoài các thuộc tính của đối tượng user, ID của đối tượng bankCard được truyền dưới dạng tham chiếu đến đối tượng bankCard trong đối tượng user

Tuy nhiên, những tài liệu này là độc lập, mặc dù chúng tôi đang đề cập đến tài liệu thẻ ngân hàng thông qua tài sản id. Không có mối quan hệ giữa họ

Theo tình huống, một người dùng có thể có nhiều hơn một thẻ ngân hàng. Do đó, chúng tôi thay thế thuộc tính bankCard trong tài liệu người dùng bằng một mảng ID như sau. bankCards:[‘id1’, ‘id2’, ‘id3']

Vì cách tiếp cận này tương tự như cách tiếp cận của cơ sở dữ liệu quan hệ, thao tác dữ liệu được tập trung tại một điểm duy nhất, do đó thúc đẩy tính nhất quán của dữ liệu

Sử dụng tài liệu nhúng

Phương pháp này được gọi là không chuẩn hóa. Để thực hiện điều này, chúng ta sẽ phải nhúng đối tượng thẻ ngân hàng vào đối tượng user

let user = {
id:'',
name:'',
bankCard: {
id: '',
number:'',
}
}

Trong ví dụ này, đối tượng user có thuộc tính riêng của nó. Thêm vào đó, nó sẽ chứa đối tượng bankCard và các thuộc tính tương ứng của nó

Đối với trường hợp người dùng có nhiều thẻ ngân hàng, bạn có thể thay thế đối tượng bankCard bằng một mảng đối tượng thẻ ngân hàng.

let user = {
id:'',
name:'',
bankCard: {
id: '',
number:'',
}
}
4

Bằng cách nhúng tài liệu này vào tài liệu kia, chúng tôi có thể cải thiện hiệu suất truy vấn của hệ thống, do đó tiết kiệm thời gian và cải thiện tốc độ

Sự đánh đổi

Nếu bạn có nền tảng về SQL, rất có thể bạn sẽ thiên về việc sử dụng các tham chiếu, trong khi một số người có thể cảm thấy thoải mái với cách tiếp cận tài liệu nhúng. Nhưng bạn không thể có cả hai cách tiếp cận cùng một lúc

Cả hai cách tiếp cận đều có ưu và nhược điểm. Do đó, bạn phải đánh đổi giữa tính nhất quán và hiệu suất truy vấn

Tính nhất quán

Khi sử dụng tài liệu tham khảo, tài liệu gọn gàng và ít tắc nghẽn hơn khi so sánh với tài liệu được nhúng. Do đó, chúng tôi có hai tài liệu rõ ràng và độc lập

Cách tiếp cận này tương tự như cách tiếp cận của cơ sở dữ liệu quan hệ. Do đó, giả sử chúng tôi muốn cập nhật một tài liệu cụ thể. Chúng tôi chỉ có một nơi duy nhất để sửa đổi. Vì vậy, cách tiếp cận này phù hợp

Tuy nhiên, để tải dữ liệu, chúng tôi có thể phải chạy các truy vấn bổ sung, do đó làm giảm hiệu suất truy vấn. Đôi khi, có những tình huống mà bạn sẽ phải chạy truy vấn nhanh và trong những tình huống như vậy, bạn không nên tiếp tục sử dụng tham chiếu

Hiệu suất truy vấn

Khi nhúng tài liệu, chúng tôi có một tài liệu duy nhất với tất cả các chi tiết của cả hai tài liệu. Một trong những ưu điểm mạnh nhất của việc nhúng tài liệu là bạn có thể tải cả chi tiết người dùng và chi tiết thẻ ngân hàng bằng một truy vấn duy nhất, do đó cải thiện tốc độ và hiệu suất truy vấn

Tuy nhiên, tài liệu có thể bị tắc nghẽn — đặc biệt nếu bản thân tài liệu có nhiều thuộc tính

Giả sử một bản cập nhật hoặc thay đổi đối với tài liệu phụ được thực hiện. Rủi ro rất nghiêm trọng, vì đôi khi có nhiều tài liệu cần được cập nhật. Và nếu cập nhật không thành công tại bất kỳ thời điểm nào, một số phần sẽ không được cập nhật. Do đó, dữ liệu không nhất quán. Đây là một trong những nhược điểm lớn nhất khi áp dụng kỹ thuật này

Phương pháp lai

Xem xét các vấn đề được giải quyết ở trên, khi phát triển các ứng dụng phức tạp, rất có thể các tài liệu sẽ có nhiều thuộc tính (hơn 50 thuộc tính mỗi tài liệu). Trong những tình huống như vậy, tham chiếu hoặc nhúng sẽ không đủ và sẽ ảnh hưởng trực tiếp đến hiệu suất của hệ thống

Ý tưởng

Trong phương pháp kết hợp, hai tài liệu (người dùng và thẻ ngân hàng) được tạo với mỗi tài liệu có danh sách thuộc tính. Sau đó, các thuộc tính cần thiết của tài liệu phụ (thẻ ngân hàng) được trích xuất và nhúng trong tài liệu người dùng

let bankCard = {
id:'',
name:'',
number:'',
expiry:''
}
let user = {
id:'',
name:'',
dob:'',

bankCard: {
id: 'ref',
number:'',
}
}

Theo cách tiếp cận này, thẻ ngân hàng có một tài liệu riêng biệt và chỉ các thuộc tính cần thiết của tài liệu thẻ ngân hàng được trích xuất và đặt trong tài liệu người dùng dưới dạng một đối tượng trong số các thuộc tính user khác. Do đó, điều này tránh được việc phải lưu trữ tất cả các thuộc tính của thẻ ngân hàng trong tài liệu phụ

Vì tài liệu con chỉ có các thuộc tính cần thiết, cách tiếp cận này ảnh hưởng đến hiệu suất truy vấn được tối ưu hóa và tính nhất quán trong toàn hệ thống

Ứng dụng

Khi phát triển ứng dụng thương mại điện tử, bạn sẽ có các tài liệu sau trong cơ sở dữ liệu của mình. sản phẩm, đơn đặt hàng, giỏ hàng, v.v. Khi đặt hàng, bạn sẽ yêu cầu ảnh chụp nhanh của sản phẩm và một số chi tiết nhất định, chẳng hạn như tên sản phẩm và giá tại thời điểm nhất định

Trong trường hợp cần có ảnh chụp nhanh dữ liệu, nên sử dụng phương pháp kết hợp

Phần kết luận

Đã thảo luận về những ưu và nhược điểm, cách tiếp cận tốt nhất hoàn toàn là quyết định của bạn, xem xét các yêu cầu của ứng dụng và truy vấn. Do đó, bạn phải quyết định trước các truy vấn và thiết kế các mối quan hệ dựa trên các truy vấn để thực hiện sự đánh đổi. Thông tin thêm về mô hình hóa các mối quan hệ có thể được tìm thấy trong tài liệu của MongoDB

Tôi hy vọng bài viết này đã hướng dẫn bạn cách lập mô hình các mối quan hệ trong MongoDB. Chúc bạn học tập và viết mã vui vẻ

MongoDB xử lý các mối quan hệ như thế nào?

MongoDB là 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 được nhúng hoặc được tham chiếu .

MongoDB có cho phép các mối quan hệ không?

Mối quan hệ MongoDB là đại diện cho cách nhiều tài liệu được kết nối logic với nhau trong MongoDB . Các phương thức Embedded và Referenced là hai cách để tạo các mối quan hệ như vậy.

Làm cách nào để thiết lập mối quan hệ giữa hai bộ sưu tập trong MongoDB?

Để thực hiện MongoDB Tham gia hai bộ sưu tập, bạn phải sử dụng toán tử tra cứu $ . Nó được định nghĩa là một giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và hỗ trợ lọc dữ liệu từ các tài liệu đã nối. Ví dụ: nếu người dùng yêu cầu tất cả các điểm từ tất cả học sinh, thì truy vấn bên dưới có thể được viết. Sinh viên.

Có bao nhiêu loại mối quan hệ trong MongoDB?

MongoDB có hai loại mối quan hệ. Đã nhúng và Tham chiếu được thực hiện. Mỗi mối quan hệ đều có lợi thế và tập quán của nó.