Đây là một trường hợp dữ liệu có mối quan hệ Nhiều-Nhiều. Tôi nghĩ rằng có vài nghìn sinh viên và vài trăm khóa học trong cơ sở dữ liệu của bạn.
Để bắt đầu, tôi có thể sử dụng thiết kế sau với chi tiết khóa học được nhúng với mỗi sinh viên dưới dạng một mảng tài liệu con được gọi là courses
.
- students collection
id:
name:
courses: [ { id: 1, name: }, { id: 5, name: }, ... ]
- courses collection
id:
name:
description:
Lưu ý, id và tên khóa học được lưu trữ trong cả hai bộ sưu tập. Đây là sự trùng lặp dữ liệu. Điều này không sao cả, vì các chi tiết trùng lặp không thường xuyên thay đổi (hoặc có thể không thay đổi).
Truy vấn tất cả các khóa học mà sinh viên đã đăng ký, ví dụ:db.students.find( { name: "John" } )
. Thao tác này sẽ trả về một tài liệu sinh viên có tên phù hợp và tất cả các khóa học (trường mảng). Xem db.collection.find
.
Truy vấn tất cả sinh viên đã đăng ký vào một khóa học cụ thể:db.students.find( { "courses.name": "Java Programming" } )
. Thao tác này sẽ trả về tất cả các tài liệu sinh viên có tên khóa học phù hợp với tiêu chí "Lập trình java". Xem Truy vấn một mảng tài liệu nhúng
.
Hơn nữa, bạn có thể sử dụng chiếu để loại trừ và bao gồm các trường từ kết quả.
LƯU Ý:
- Bạn có thể nhúng thông tin sinh viên vào bộ sưu tập khóa học, thay vì nhúng các khóa học vào sinh viên. Các truy vấn sẽ tương tự như các truy vấn trên, nhưng bạn sẽ truy vấn bộ sưu tập các khóa học. Nó phụ thuộc vào trường hợp sử dụng của bạn.
- Bạn chỉ có thể lưu trữ trường id khóa học trong mảng khóa học, của tập hợp sinh viên; đây là trường hợp bạn thường xuyên thay đổi trường tên khóa học. Các truy vấn sẽ sử dụng Aggregation $ lookup (hoạt động "tham gia") để nhận khóa học và từ bộ sưu tập khóa học.
- Thông tin về Thiết kế mô hình dữ liệu cho dữ liệu MongoDB dựa trên tài liệu.