如何在dynamodb中建模1:N:M

时间:2016-05-16 00:34:29

标签: amazon-dynamodb

我们需要在dynamodb中创建学校的模式。要求如下:

  1. 每所学校都包含课程组列表。 [1:N]
  2. 每个课程组都包含一系列课程。 [1:N]
  3. 每门课程都包含一系列模块[1:N]
  4. 每个实体都有一组相应的属性。这是我对模式的第一次看法

    学校 - 学校ID - 哈希键,属性。 课程组:学校ID - Hashkey,课程组 - 具有属性的范围键 课程:学校ID - HashKey,[courseGroup + CourseName] - 具有属性的范围键。 模块:学校ID - HashKey,[CourseGroup + CourseName + ModuleName] - 带属性的范围键。

    上述模式的问题在于,如果我想在创建课程和CourseGroup时预先创建模块,则它不起作用。此外,我还希望在此架构上执行以下查询。

    1. 获取特定学校的所有课程组和课程及模块的列表。
    2. 获取特定学校的课程组列表。
    3. 获取特定课程组的课程列表。
    4. 获取给定课程的所有模块列表。

1 个答案:

答案 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)

这里要注意的最重要的事情是,即使列的名称相同,实际上两个表之间也没有链接,您需要在应用程序级别加入这些表

让我们看看您是否涵盖了所有问题:

  1. 获取所有课程组和课程和模块的列表 给学校。

    在courseGroup表中传递schoolId获取所有courseIds - >在课程表中传递courseIds以获取所有moduleIds - >传递moduleId以获取模块表中的所有模块

  2. 获取特定学校的课程组列表。

    在courseGroupIndex表中传递schoolId以获取所有courcesGroup

  3. 获取特定课程组的课程列表。

    在courseGroup表中传递courseGroupId以获取所有courseIds

  4. 获取给定课程的所有模块列表。

    在课程表中传递courseId以获取所有moduleIds

  5. 希望有所帮助