【发布时间】:2021-01-18 03:03:39
【问题描述】:
我们有两个实体类别和用户。是经典的多2多关系。
- 可以将用户标记到多个类别
- 类别可以有多个用户
访问模式
- 获取类别列表
- 获取用户列表,以及用户所属的类别
- 获取单用户,单用户所属类别
- 获取特定类别的用户列表
但我对如何查询没有什么困惑
- 用户列表并获取每个用户所属的所有类别
【问题讨论】:
标签: amazon-web-services amazon-dynamodb
我们有两个实体类别和用户。是经典的多2多关系。
访问模式
但我对如何查询没有什么困惑
【问题讨论】:
标签: amazon-web-services amazon-dynamodb
如果您有一个包含 Category 的 PK 和一个包含 User 的 SK 来为每个类别中的用户建模,您可以创建一个 Global Secondary Index (GSI),其中 PK 指向原始表的 SK(User)和SK 指向原表的 PK (Category)。
Table
| PK | SK | ...
| C#1 | U#1 | ...
| C#1 | U#2 | ...
| C#2 | U#1 | ...
| C#2 | U#3 | ...
GSI
| Table_SK | Table_PK | ...
| U#1 | C#1 | ...
| U#1 | C#2 | ...
| U#2 | C#1 | ...
| U#3 | C#2 | ...
现在可以查询了:
更新:根据 cmets 包含元数据的扩展模型
Table
| PK | SK | CAT | USR | Metadata
---------------------------------------
| | DATA | | { ...: ... }
| C#1 | U#1 | C#1 | U#1 | { ...: ... } (copied from user record)
| | U#2 | C#1 | U#1 | { ...: ... } (copied from user record)
---------------------------------------
| | DATA | | { ...: ... }
| C#2 | U#1 | C#1 | U#1 | { ...: ... } (copied from user record)
| | U#3 | C#1 | U#1 | { ...: ... } (copied from user record)
---------------------------------------
| U#1 | DATA | | { ...: ... }
---------------------------------------
| U#2 | DATA | | { ...: ... }
---------------------------------------
| U#3 | DATA | | { ...: ... }
---------------------------------------
GSI_Users
| Table_USR | Table_CAT |
-----------------------
| U#1 | C#1 |
| | C#2 |
-----------------------
| U#2 | C#1 |
-----------------------
| U#3 | C#2 |
-----------------------
GSI_Categories
| Table_CAT | Table_USR |
-----------------------
| C#1 | U#1 |
| | U#2 |
-----------------------
| C#2 | U#1 |
| | U#3 |
-----------------------
查询:
C#x和SK=DATA查询表
C#x查询GSI_Categories
U#x 和SK=DATA 查询表
U#x
【讨论】: