MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak należy modelować następujące relacje wiele do wielu w MongoDB?

Oto kilka uwag. Ostatecznie zależy to od Twoich wymagań:

  1. Ocena jest opcjonalna, prawda?

    Jeśli tak, zadaj sobie pytanie, czy chcesz połączyć wymaganą funkcję (przechowywanie stowarzyszenia nauczyciela/ucznia) z funkcją, którą warto mieć. Kod, który implementuje funkcję, którą warto mieć, zapisuje teraz do Twojej najważniejszej kolekcji. Myślę, że możesz poprawić oddzielenie problemów w swoim kodzie z innym schematem bazy danych.

  2. Czy będziesz potrzebować więcej funkcji ?

    Załóżmy, że chcesz udostępnić uczniom listę ocen, które wystawili, średnią ocenę, jaką uczeń wystawił nauczycielom, i chcesz pokazać zmiany ocen w czasie. Będzie to bardzo brudne z osadzonymi dokumentami. Osadzone dokumenty są mniej elastyczne .

  3. Jeśli potrzebujesz najwyższej wydajności odczytu, musisz zdenormalizować więcej danych

    Jeśli chcesz trzymać się osadzonych dokumentów, możesz skopiować więcej danych. Załóżmy, że istnieje przegląd ocen nauczyciela, w którym można zobaczyć imiona i nazwiska uczniów. Pomocne byłoby osadzenie obiektu

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

Jako alternatywy rozważ

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

Stowarzyszenie nauczyciel/uczeń będzie nadal przechowywane w obiekcie nauczyciela, ale oceny znajdują się w różnych kolekcjach. Nie można utworzyć oceny, jeśli nie można znaleźć powiązania między nauczycielem a uczniem.

lub

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

Aby znaleźć wszystkich uczniów dla danego nauczyciela, musisz najpierw wysłać zapytanie do dokumentu łączącego, a następnie wykonać $in zapytaj uczniów i odwrotnie. To jeszcze jedno zapytanie, ale ma ogromny wzrost elastyczności.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak dopasować zagregowane elementy ($graphLookup) w MongoDB?

  2. MongoDB wysyła zapytania do wielu kolekcji jednocześnie

  3. W jaki sposób identyfikator maszyny/nazwa hosta jest mapowany/odwzorowywany na 3 bajty w identyfikatorze obiektu?

  4. Jak znaleźć po id za pomocą sterownika MongoDB Node?

  5. Mongodb aktualizuje głęboko zagnieżdżony subdokument