sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan skal følgende mange til mange-forhold modelleres i MongoDB?

Her er nogle overvejelser. I sidste ende afhænger det af dine krav:

  1. Bedømmelse er valgfri, ikke?

    Spørg i så fald dig selv, om du vil kombinere en påkrævet funktion (opbevaringslærer/elevforening) med en fin at have. Kode, der implementerer en fin-at-have-funktion, skriver nu til din vigtigste samling. Jeg tror, ​​du kan forbedre adskillelsen af ​​bekymringer i din kode med et andet db-skema.

  2. Har du brug for flere funktioner ?

    Lad os sige, at du vil give eleverne en liste over vurderinger, de har givet, den gennemsnitlige vurdering, en elev har givet til lærere, og du vil vise en udvikling af vurderinger over tid. Dette vil være meget rodet med indlejrede dokumenter. Indlejrede dokumenter er mindre fleksible .

  3. Hvis du har brug for den bedste læseydelse, skal du denormalisere flere data

    Hvis du vil holde dig til de indlejrede dokumenter, vil du måske kopiere flere data. Lad os sige, at der er en oversigt over vurderinger pr. lærer, hvor du kan se elevernes navne. Det ville være nyttigt at integrere et objekt

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

Overvej som alternativer

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

Lærer/elevforening vil stadig blive gemt i lærerobjektet, men vurderingerne er i en anden samling. En bedømmelse kan ikke oprettes, hvis der ikke kan findes en sammenhæng mellem lærer og elev.

eller

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

For at finde alle elever for en given lærer, skal du først forespørge i linkerdokumentet og derefter lave en $in forespørgsel på eleverne og omvendt. Det er endnu en forespørgsel, men den kommer med en enorm gevinst i fleksibilitet.




  1. Express.js - Filtrer et mongodb-id i URL'en

  2. Redis datastruktur pladskrav

  3. betydningen af ​​sudo chown -R `id -u` /data/db

  4. Heroku rake opgave uinitialiseret konstant for MongoMapper model