根据我的数据模型,我需要在dynamodb中存储多对多的关系数据项 示例: 我有一个名为studentId的领域,每个学生都会分配几个科目。
要求:
因此,对于给定的studentId,我需要存储所有主题。我需要将所有科目分配给给定的学生。
类似地,对于给定的主题,我需要知道该主题被分配给的学生ID。
我计划将它存储在dynamoDb中,如下所示:
因此,如果我仅使用primaryKey进行查询,它将为我提供具有该主键和所有不同哈希键的所有行。
辅助密钥
subjectId
studentId
我想知道这是否合理或正确。或者有更好的方法来解决这个问题。
答案 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