在dynamodb单表中处理多对多关系

时间:2020-09-28 06:20:35

标签: amazon-web-services amazon-dynamodb

我正在为一个研究所设计一个动态表。它具有诸如研究所,学生,学科和教师之类的实体。它们之间的关系就是这样。

  • 学院-多对多学生
  • 研究所-多对多的老师
  • 研究所-涉及许多对许多人

我选择了研究所ID 作为 PK ,并且选择了位置作为 SK 。但是在这种情况下,存在更多到许多的关系。那么在dynamodb中如何处理这种情况呢?

谢谢。

1 个答案:

答案 0 :(得分:1)

DynamoDB是一个noSQL数据库,您应该在其中尽可能规范化和复制数据。您正在考虑使用SQL,并试图对数据进行规范化,因此您需要改变思维方式。

为每个学院,学生,老师和学科创建一个项目。 在学院内创建students地图或列表(我更喜欢ID为键的地图),并在学生内部创建institutes地图或列表。这些地图或列表由原始项目的副本组成:

inst-0 | USA  | Institute name                              | { stud-0: { name: John }, studo-1: { name: Matt } }
-----------------------------------------------------------------------------------------------------------------
stud-0        | John | { inst-0: { name: Institute name } } |
-----------------------------------------------------------------------------------------------------------------
stud-1        | Matt | { inst-0: { name: Institute name } } |

这里的缺点是,当原始文档更改时,您需要更新每个副本。但这通常不是问题,除非您的数据非常频繁地更改。

如果复制的数据经常更改,则可以创建一个中间关系项目,但也许关系数据库更适合您的项目。

您还可以为每个学生创建一个项目,并将对这些学生的引用存储到学院项目中。但是在这里,您并没有使数据非正规化,但是如果您的数据经常更改或每个机构中都有大量学生,这可能是一个可行的解决方案。