sql >> Databáze >  >> NoSQL >> MongoDB

Jak by měl být v MongoDB modelován následující vztah mnoho až mnoho?

Zde jsou některé úvahy. Nakonec záleží na vašich požadavcích:

  1. Hodnocení je volitelné, že?

    Pokud ano, zeptejte se sami sebe, zda chcete zkombinovat požadovanou funkci (ukládání asociace učitele/studenta) s funkcí, která je příjemná. Kód, který implementuje užitečnou funkci, nyní zapisuje do vaší nejdůležitější sbírky. Myslím, že můžete zlepšit oddělení obav ve svém kódu s jiným schématem db.

  2. Budete potřebovat další funkce ?

    Řekněme, že chcete studentům poskytnout seznam hodnocení, která dali, průměrné hodnocení, které student udělil učitelům, a chcete ukázat vývoj hodnocení v čase. S vloženými dokumenty to bude velmi chaotické. Vložené dokumenty jsou méně flexibilní .

  3. Pokud potřebujete špičkový výkon při čtení, musíte denormalizovat více dat

    Pokud se chcete držet vložených dokumentů, možná budete chtít zkopírovat více dat. Řekněme, že existuje přehled hodnocení podle učitele, kde můžete vidět jména studentů. Bylo by užitečné vložit objekt

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

Jako alternativy zvažte

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

Sdružení učitel/student bude stále uloženo v objektu učitele, ale hodnocení jsou v jiných kolekcích. Hodnocení nelze vytvořit, pokud nelze najít žádné spojení mezi učitelem a studentem.

nebo

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

Chcete-li najít všechny studenty daného učitele, musíte nejprve zadat dotaz na dokument linkeru a poté provést $in dotaz na studenty a naopak. To je ještě jeden dotaz, ale přináší obrovský nárůst flexibility.




  1. Připojení k MongoDB s Androidem v Eclipse

  2. Co je MongoDB a jak funguje?

  3. Django-Nonrel s polem seznamu Mongodb

  4. Jak získat data Mongo pomocí agregátu MongoDB verze 3.0