amazon-dynamodb - 在 DynamoDB 中建模关系数据(嵌套关系)

标签 amazon-dynamodb hierarchical-data dynamodb-queries amazon-dynamodb-index amazon-dynamodb-data-modeling

实体模型:

enter image description here

我已阅读有关创建 Modeling Relational Data in DynamoDB 的 AWS 指南.我的访问模式太困惑了。

访问模式

+-------------------------------------------+------------+------------+
| Access Pattern                            | Params     | Conditions |
+-------------------------------------------+------------+------------+
| Get TEST SUITE detail and check that      |TestSuiteID |            |
| USER_ID belongs to project has test suite |   &UserId  |            |
+-------------------------------------------+------------+------------+
| Get TEST CASE detail and check that       | TestCaseID |            |
| USER_ID belongs to project has test case  |   &UserId  |            |
+-------------------------------------------+------------+------------+
| Remove PROJECT ID, all TEST SUITE         | ProjectID  |            |
| AND TEST CASE also removed                |   &UserId  |            |
+-------------------------------------------+------------+------------+

因此,我将关系实体数据建模为指导。

+-------------------------+---------------------------------+
|       Primary Key       |            Attributes           |
+-------------------------+                                 +
|     PK     |     SK     |                                 |
+------------+------------+---------------------------------+
|   user_1   |    USER    |    FullName    |                |
+            +            +----------------+----------------+
|            |            | John Doe       |                |
+            +------------+----------------+----------------+
|            |   prj_01   |   JoinedDate   |                |
+            +            +----------------+----------------+
|            |            | 2019-04-22     |                |
+            +------------+----------------+----------------+
|            |   prj_02   |   JoinedDate   |                |
+            +            +----------------+----------------+
|            |            | 2019-05-26     |                |
+------------+------------+----------------+----------------+
|   user_2   |    USER    |    FullName    |                |
+            +            +----------------+----------------+
|            |            | Harry Potter   |                |
+            +------------+----------------+----------------+
|            | prj_01     |   JoinedDate   |                |
+            +            +----------------+----------------+
|            |            | 2019-04-25     |                |
+------------+------------+----------------+----------------+
| prj_01     | PROJECT    |      Name      |   Description  |
+            +            +----------------+----------------+
|            |            | Facebook Test  | Do some stuffs |
+            +------------+----------------+----------------+
|            | t_suite_01 |                |                |
+            +            +----------------+----------------+
|            |            |                |                |
+------------+------------+----------------+----------------+
| prj_02     | PROJECT    |      Name      |   Description  |
+            +            +----------------+----------------+
|            |            | Instagram Test | ...            |
+------------+------------+----------------+----------------+
| t_suite_01 | TEST_SUITE |      Name      |                |
+            +            +----------------+----------------+
|            |            | Test Suite 1   |                |
+            +------------+----------------+----------------+
|            | t_case_1   |                |                |
+            +            +----------------+----------------+
|            |            |                |                |
+------------+------------+----------------+----------------+
| t_case_1   | TEST_CASE  |      Name      |                |
+            +            +----------------+----------------+
|            |            | Test Case 1    |                |
+------------+------------+----------------+----------------+

如果我只有 UserID 和 TestCaseId 作为参数,我如何获取 TestCase Detail 并验证 UserId 是否具有权限。

我曾考虑将复杂的分层数据存储在单个项目中。像这样的东西

+------------+-------------------------+
| t_suite_01 | user_1#prj_1            |
+------------+-------------------------+
| t_suite_02 | user_1#prj_2            |
+------------+-------------------------+
| t_case_01  | user_1#prj_1#t_suite_01 |
+------------+-------------------------+
| t_case_02  | user_2#prj_1#t_suite_01 |
+------------+-------------------------+

问题:这种情况下最好的方法是什么?如果您能给我一些关于这种方法的建议,我将不胜感激(鞠躬)

最佳答案

我认为下面的架构可以满足您的需求。在“GSIPK”属性上创建一个Partition Key only GSI,查询如下:

  1. 获取测试套件详细信息并验证用户:查询 GSI - PK == ProjectId, FilterCondition [SK == TestSuiteId || PK == 用户 ID]

  2. 获取测试用例详细信息并验证用户:查询 GSI - PK == TestCaseId, FilterCondition [SK = TestSuiteId:TestCaseId || PK = 用户 ID]

  3. 移除项目:查询 GSI - PK == ProjectId,移除所有返回的项目。

查询 1 和 2 返回 1 或 2 个项目。一个是详细项,另一个是测试套件或测试用例的用户权限。如果只有一项返回,则它是详细信息项,用户无权访问。

enter image description here

enter image description here

关于amazon-dynamodb - 在 DynamoDB 中建模关系数据(嵌套关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55732175/

相关文章:

node.js - 用户无权执行 : dynamodb:PutItem on resource

docker - 无效的装载路径 : 'db' mount path must be absolute

amazon-dynamodb - 通过数据管道截断 DynamoDb 或重写数据

mysql - InnoDB分层数据: recursively delete fragment of a tree

java - 使用 QuerySpec 对索引进行查询时 Dynamodb 排序不起作用

java - DynamoDB - 如何检查现有表是否为空或非空

sql - SAS SQL 分层查询

html - 分层 html 表,将最后一个 td 放在下一行

amazon-dynamodb - DynamoDB - 通过全局二级索引获取项目

java - 无法在 java 中导入 dynamodbv2 库