2016-05-16 6 views
3

Wir haben eine Anforderung, ein Schema einer Schule in Dynamodb zu erstellen. Die Anforderung lautet wie folgt:Wie man 1 modelliert: N: M in dynamodb

  1. Jede Schule enthält eine Liste der Kursgruppe. [1: N]
  2. Jede Kursgruppe enthält eine Liste von Kursen. [1: N]
  3. Jeder Kurs enthält eine Liste von Modulen [1: N]

Jede Einheit einen entsprechenden Satz von Attributen hat. Hier ist meine erste Sicht auf das Schema

Schule - School Id - Hash - Schlüssel, Attribute. Kursgruppe: School Id - Hashkey, Kurs Group - Range Schlüssel mit Attributen Kurse: School Id - HashKey, [Kursgruppe + Kursname] - Bereich Schlüssel mit Attributen. Module: Schulkennung - HashKey, [Kursgruppe + Kursname + Modulname] - Bereichsschlüssel mit Attributen.

Das Problem mit dem obigen Schema ist, dass wenn ich ein Modul im Vorfeld mit dem Erstellen eines Kurses und CourseGroup erstellen will, es nicht funktioniert. Ich habe auch die folgenden Abfragen, die ich an diesem Schema durchführen möchte.

  1. Erhalten Sie die Liste aller Kursgruppen und Kurse und Module für eine bestimmte Schule.
  2. Holen Sie sich die Liste der Kursgruppen für eine bestimmte Schule.
  3. Erhalten Sie die Liste der Kurse für eine bestimmte Kursgruppe.
  4. Holen Sie sich die Liste aller Module für einen bestimmten Kurs. Hier

Antwort

1

ist das erste Schema, das ich gekommen bin, oben mit:

school (schoolId(hash), otherAttributes) 
courseGroup (gpId(hash), schoolId(range), array of courseIds , othersAttributes) 
    courseGroupIndex(schoolId(hash), otherAttribute) -- Global Secondary Index 
courses (courseId, array of moduleIds, othersAttributes) 
modules (moduleId , othersAttributes) 

das Wichtigste hier zu beachten, über ist, dass tatsächlich gibt es keine Verbindung zwischen zwei Tabellen, auch wenn der Namen der Spalten gleich sind, müssen Sie

diese Tabellen auf der Anwendungsebene verbinden

Lassen Sie sehen, ob alle Ihre Fragen werden behandelt:

  1. Holen Sie sich die Liste aller Kursgruppen und Kurse und Module für eine gegebene Schule.

    Pass schoolId in courseGroup Tabelle alle courseIds bekommen -> courseIds in Kurse Tabelle passieren, um alle moduleIds zu bekommen -> passieren moduleId alle Module von Modultabelle für eine gegebene

  2. Holen Sie die Liste der Kursgruppen zu erhalten Schule.

    Pass schoolId in courseGroupIndex Tisch bekommen alle courcesGroup

  3. die Liste der Kurse für eine bestimmte Kursgruppe übernehmen.

    Pass courseGroupId in courseGroup Tisch bekommen alle courseIds

  4. die Liste aller Module für einen bestimmten Kurs holen.

    Pass courseId in Kurs Tabelle alle moduleIds

Hoffnung zu erhalten, die

hilft