我正在为一个研究所设计一个动态表。它具有诸如研究所,学生,学科和教师之类的实体。它们之间的关系就是这样。
我选择了研究所ID 作为 PK ,并且选择了位置作为 SK 。但是在这种情况下,存在更多到许多的关系。那么在dynamodb中如何处理这种情况呢?
谢谢。
答案 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 } } |
这里的缺点是,当原始文档更改时,您需要更新每个副本。但这通常不是问题,除非您的数据非常频繁地更改。
如果复制的数据经常更改,则可以创建一个中间关系项目,但也许关系数据库更适合您的项目。
您还可以为每个学生创建一个项目,并将对这些学生的引用存储到学院项目中。但是在这里,您并没有使数据非正规化,但是如果您的数据经常更改或每个机构中都有大量学生,这可能是一个可行的解决方案。