我们需要在dynamodb中创建学校的模式。要求如下:
每个实体都有一组相应的属性。这是我对模式的第一次看法
学校 - 学校ID - 哈希键,属性。 课程组:学校ID - Hashkey,课程组 - 具有属性的范围键 课程:学校ID - HashKey,[courseGroup + CourseName] - 具有属性的范围键。 模块:学校ID - HashKey,[CourseGroup + CourseName + ModuleName] - 带属性的范围键。
上述模式的问题在于,如果我想在创建课程和CourseGroup时预先创建模块,则它不起作用。此外,我还希望在此架构上执行以下查询。
答案 0 :(得分:1)
以下是我提出的初始架构:
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)
这里要注意的最重要的事情是,即使列的名称相同,实际上两个表之间也没有链接,您需要在应用程序级别加入这些表
让我们看看您是否涵盖了所有问题:
获取所有课程组和课程和模块的列表 给学校。
在courseGroup表中传递schoolId获取所有courseIds - >在课程表中传递courseIds以获取所有moduleIds - >传递moduleId以获取模块表中的所有模块
获取特定学校的课程组列表。
在courseGroupIndex表中传递schoolId以获取所有courcesGroup
获取特定课程组的课程列表。
在courseGroup表中传递courseGroupId以获取所有courseIds
获取给定课程的所有模块列表。
在课程表中传递courseId以获取所有moduleIds
希望有所帮助