如何确保我已删除/更新了该表中没有用户ID的DynamoDB中自己的记录

时间:2019-04-12 12:36:48

标签: database database-design nosql amazon-dynamodb modeling

我对DynamoDB还是很陌生。所以我对此有很多疑问。

我建立了如下的模型关系

表关系

  • 许多Users有很多项目
  • 一个项目有很多套房
  • 套房有很多案例

表模型

用户表

+-------------+------------+
| UserID (PK) | Attributes |
+-------------+------------+
|     U_01    |     ...    |
+-------------+------------+
|     U_02    |     ...    |
+-------------+------------+
|     U_03    |     ...    |
+-------------+------------+

项目表

+-----------+------------+
| ProjectId | Attributes |
+-----------+------------+
|   PJ_01   |     ...    |
+-----------+------------+
|   PJ_02   |     ...    |
+-----------+------------+
|   PJ_03   |     ...    |
+-----------+------------+

UserProject表

+-------------+----------------+------------+
| UserID (PK) | ProjectID (SK) | Attributes |
+-------------+----------------+------------+
|     U_01    |      PJ_01     |     ...    |
+-------------+----------------+------------+
|     U_02    |      PJ_02     |     ...    |
+-------------+----------------+------------+
|     U_03    |      PJ_01     |     ...    |
+-------------+----------------+------------+

套房表

+------------------+----------------+------------+
|   SuiteId (SK)   | ProjectId (PK) | Attributes |
+------------------+----------------+------------+
|  S_01            |      PJ_01     | ...        |
+------------------+----------------+------------+
|  S_02            |      PJ_02     | ...        |
+------------------+----------------+------------+
|  S_03            |      PJ_01     | ...        |
+------------------+----------------+------------+

案例表

+-----------------+------------------+------------+
|   CaseId (PK)   |   SuiteId (SK)   | Attributes |
+-----------------+------------------+------------+
|       C_01      |        S_01      | ...        |
+-----------------+------------------+------------+
|       C_02      |        S_01      | ...        |
+-----------------+------------------+------------+
|       C_03      |        S_01      | ...        |
+-----------------+------------------+------------+

为了更新或删除测试用例(例如:C_01),我必须确保用户不得删除非自有项目(例如:U_02将不允许删除C_01)。顺便说一句,我通过身份验证后从令牌中获得了用户ID

我已经设计了如下所示的API端点来更新或删除数据。您能告诉我您在这种情况下的最佳做法吗?非常感谢。

更新:/ cases /:id

删除:/ cases /:id

(我没有像/ projects /:prjId / suites /:sId / case /:cId这样的东西作为Microsoft创建API的最佳实践建议)

1 个答案:

答案 0 :(得分:0)

几天后,我重新考虑了使用关系模型表的方式。

对于DynamoDB,我们有2个定义来解析RDS。  -全球二级指数(GSI)  -Adjacency List

我发现"AWS re:Invent 2018: Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB"视频。疯了。

他们建议我们使用1 table for 1 applicationHierarchical Data Structure as Itemspair partition key and sort key to queryGSI

但是直到@Rick Houlihan give me an answer为止,我仍然不清楚。