如何在dynamodb中存储一对多的关系数据

时间:2015-12-06 21:41:22

标签: amazon-dynamodb

根据我的数据模型,我需要在dynamodb中存储多对多的关系数据项 示例: 我有一个名为studentId的领域,每个学生都会分配几个科目。

要求:

  1. 因此,对于给定的studentId,我需要存储所有主题。我需要将所有科目分配给给定的学生。

  2. 类似地,对于给定的主题,我需要知道该主题被分配给的学生ID。

  3. 我计划将它存储在dynamoDb中,如下所示:

    • 表1:StudentToSubjects:
      • 哈希键:StudenId,
      • RangeKey:subjectId

    因此,如果我仅使用primaryKey进行查询,它将为我提供具有该主键和所有不同哈希键的所有行。

    辅助密钥

    • 辅助HashKey:subjectId
    • Secondary RangeKey:studentId

    我想知道这是否合理或正确。或者有更好的方法来解决这个问题。

1 个答案:

答案 0 :(得分:3)

你的设计看起来还不错,但你需要在最终确定它之前仔细考虑一下,假设你已经实现了这个设计,10年后你会查询特定主题的表格,你会得到过去10年的所有学生您可能不需要(当您使用辅助表-GSI查询时)。

我可能会跟随

学生大师:

Hash Key: studentId
subjectIds (Number-set or String-set)

学科硕士:

Hash Key: subjectId
Range Key: Year
studentIds (Number-set or String-set)

这样做的好处是您将消耗更少的查询,对于特定科目或学生,您将只消耗1次读取(如果大小小于4kb)。

再一次,这只是在最终确定Schema之前考虑所有查询。

编辑:你不需要重复学生,它将保持独特。 它会看起来像这样

studentId -> s1
subjectIds -> sub1,sub2,subN (This is set)

studentId -> s2
subjectIds -> sub3,sub4

以下是数据类型链接,您可以参考http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes