Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Dynamodb中多对多关系的建模_Database_Nosql_Amazon Dynamodb_Entity Relationship_Data Modeling - Fatal编程技术网

Database Dynamodb中多对多关系的建模

Database Dynamodb中多对多关系的建模,database,nosql,amazon-dynamodb,entity-relationship,data-modeling,Database,Nosql,Amazon Dynamodb,Entity Relationship,Data Modeling,我试图在一个Dynamodb表中建模以下关系 用户->多对多->游戏 用户->多对多->组 简言之: 一个用户可以有多个游戏,多个用户可以有同一个游戏 一个用户可以在多个组中,一个组由多个用户组成 我已经确定了以下访问模式: 列出用户拥有的所有游戏 列出用户所在的所有组 列出组中的所有成员 列出组成员拥有的所有游戏 前三种访问模式可以使用相邻列表设计模式实现,如下所示: | Partition Key | Sort Key (GSI Partition Key) | | -------

我试图在一个Dynamodb表中建模以下关系

用户->多对多->游戏

用户->多对多->组

简言之:

  • 一个用户可以有多个游戏,多个用户可以有同一个游戏
  • 一个用户可以在多个组中,一个组由多个用户组成
我已经确定了以下访问模式:

  • 列出用户拥有的所有游戏
  • 列出用户所在的所有组
  • 列出组中的所有成员
  • 列出组成员拥有的所有游戏
前三种访问模式可以使用相邻列表设计模式实现,如下所示:

| Partition Key | Sort Key (GSI Partition Key)  |
| ------------- | ----------------------------- |
| User-<ID>     | Game-<ID>                     |
| User-<ID>     | Group-<ID>                    |
|分区键|排序键(GSI分区键)|
| ------------- | ----------------------------- |
|用户-|游戏-|
|用户-|组-|
关于如何实现最后访问模式的任何建议-列出一个组成员拥有的所有游戏


谢谢。

您的上一个查询,列出一个组成员拥有的所有游戏,已经是可能的,但它是一个由两部分组成的查询


首先,获取组中用户的列表,然后列出所有这些用户的所有游戏。您可能有一些重复项,可以在应用程序的数据访问层中进行清理

你可以有一行,其中pk作为组,sk作为元数据,保存此信息,并且你可以在游戏中添加或删除组成员时异步更新此实体。这将需要(1+组中成员的数量)个查询数。是的,它会。由您决定成本/收益分析,以确定是保持组和游戏之间的直接关系(这将需要更多的写入,比读取更昂贵),还是只使用几个查询来获得所需的结果。