MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mối quan hệ nhiều đến nhiều sau nên được mô hình hóa như thế nào trong MongoDB?

Dưới đây là một số cân nhắc. Cuối cùng, nó phụ thuộc vào yêu cầu của bạn:

  1. Xếp hạng là tùy chọn, phải không?

    Nếu vậy, hãy tự hỏi bản thân xem bạn có muốn kết hợp một tính năng bắt buộc (lưu trữ liên kết giáo viên / sinh viên) với một tính năng tốt để có hay không. Mã triển khai một tính năng tốt đẹp hiện được ghi vào bộ sưu tập quan trọng nhất của bạn. Tôi nghĩ rằng bạn có thể cải thiện việc phân tách mối quan tâm trong mã của mình với một giản đồ db khác.

  2. Bạn có cần nhiều tính năng hơn không ?

    Giả sử bạn muốn cung cấp cho sinh viên danh sách xếp hạng mà họ đã đưa ra, xếp hạng trung bình mà sinh viên đã dành cho giáo viên và bạn muốn hiển thị sự phát triển của xếp hạng theo thời gian. Điều này sẽ rất lộn xộn với các tài liệu nhúng. Tài liệu được nhúng kém linh hoạt hơn .

  3. Nếu bạn cần hiệu suất đọc cao nhất, bạn cần chuẩn hóa nhiều dữ liệu hơn

    Nếu bạn muốn gắn bó với các tài liệu được nhúng, bạn có thể muốn sao chép nhiều dữ liệu hơn. Giả sử có một cái nhìn tổng quan về xếp hạng cho mỗi giáo viên, nơi bạn có thể thấy tên của học sinh. Sẽ rất hữu ích nếu bạn nhúng một đối tượng

    { studentId : ObjectId, 
      rating: string, 
      studentName: string, 
      created: dateTime }
    

Là các lựa chọn thay thế, hãy xem xét

TeacherRating {
    StudentId: id
    TeacherId: id
    Rating: number
    Created: DateTime
}

Hiệp hội giáo viên / học sinh sẽ vẫn được lưu trữ trong đối tượng giáo viên, nhưng xếp hạng nằm trong một bộ sưu tập khác. Không thể tạo xếp hạng nếu không tìm thấy sự liên kết giữa giáo viên và học sinh.

hoặc

TeacherStudentClass {
    StudentId: id
    TeacherId: id
    Class: id
    ClassName: string // (denormalized, just an example)
    Rating: number // (optional)
    Created: DateTime
}

Để tìm tất cả học sinh cho một giáo viên nhất định, trước tiên bạn phải truy vấn tài liệu trình liên kết, sau đó thực hiện $in truy vấn học sinh và ngược lại. Đó là một truy vấn nữa, nhưng nó đi kèm với sự linh hoạt rất lớn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trình điều khiển mongo sao băng có thể xử lý các toán tử $ each và $ position không?

  2. kết nối với Mongodb bên trong một docker với GUI la bàn mongodb

  3. Nghe các sự kiện kết nối lại trong trình điều khiển MongoDB

  4. Chuyển đổi ObjectID thành String trong Mongo Aggregation

  5. mongodb đặt null trong bản cập nhật