首页 > 解决方案 > 在 dynamodb 单表中处理更多的多对多关系

问题描述

我正在为一个研究所设计一个 dynamodb 表。它有机构、学生、科目和教师等实体。他们之间的关系是这样的。

我选择 Institute id作为PKlocation作为SK。但是在这种情况下有更多的多对多关系。那么在 was dynamodb 中如何处理这种情况呢?

提前致谢。

标签: amazon-web-servicesamazon-dynamodb

解决方案


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 } } |

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

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

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


推荐阅读