在 DynamoDB 中对关系数据进行建模(嵌套关系)

2024-01-01

实体模型:

我已阅读有关创建的 AWS 指南在 DynamoDB 中建模关系数据 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html。我的访问模式非常混乱。

访问模式

+-------------------------------------------+------------+------------+
| 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”属性上创建仅分区键的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 个项目。一是详细项,二是测试套件或测试用例的用户权限。如果仅返回一项,则其为详细项,并且用户无权访问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 DynamoDB 中对关系数据进行建模(嵌套关系) 的相关文章

随机推荐

  • 使用 LiveData、协程和事务测试 Android Room

    我想测试我的数据库层 但我陷入了第 22 条军规类型的情况 测试用例由两部分组成 保存一些实体 加载实体并断言数据库映射按预期工作 简而言之 问题在于 Insert is a suspend方法 这意味着它需要运行在runBlocking
  • Eclipse“正确缩进”忽略空格与制表符设置

    我正在 Windows 中运行 Eclipse Juno Service Release 2 20130225 0426 我发现自动缩进 Ctrl I 会忽略常规 编辑器 文本编辑器 插入选项卡空格和 Java 代码样式 格式化程序 缩进
  • “无处不在”使用 LINQ 时的性能问题?

    升级到 ReSharper5 后 它为我提供了更多关于代码改进的有用提示 我现在随处看到的一个提示是用 LINQ 查询替换 foreach 语句 举个例子 private Ninja FindNinjaById int ninjaId fo
  • 获取 Android 上的应用程序安装日期

    有没有办法找出 Android 设备上的 应用程序安装日期 进行了大量搜索 但无法找到相关答案 无法找到有关应用程序安装日期的任何信息PackageManager文档 代码 或这个 API 级别 9向上 long installed con
  • Z Shell“自动加载”内置 - 它有什么好处?

    我已经使用 Z shell 一段时间了 我开始感到好奇 我在编写自己的函数时偶然发现的一件事是 自动加载 根据 zshbuiltins 1 手册页autoload是 相当于functions u 有一个例外 它 相当于typeset f 有
  • Webkit 必须始终在主线程上使用吗?

    我试图在后台渲染网页 但遇到了以下麻烦 2012 05 11 12 39 02 086 77207 1c03 An uncaught exception was raised 2012 05 11 12 39 02 087 77207 1c
  • 在从代码库中的 dockerfile 构建的 Docker 容器中运行 Jenkins 测试

    我想部署一个基于Jenkins的持续集成平台 由于我有各种类型的项目 PHP Symfony node Angular 等 并且我希望这些测试既可以在本地运行 也可以在 Jenkins 上运行 所以我正在考虑使用 Docker 容器 我的目
  • 数据库内部结构 - 从哪里开始? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 假设您想了解一些有关数据库内部结构的知识 最好看的源代码是什么 最好买的书 前几天我和一个朋友讨论这个问
  • 构建 Qt5 Git / Perl - 路径

    我的理解能力有点问题 In the Qt Wiki http qt project org wiki Building Qt 5 from Git aea23489ce3aa9b6406ebb28e0cda430上面写着我必须 Hint 确
  • 如何将 Delphi 调试器附加到 64 位 IIS 7.5?

    我在 Windows 7 Pro 64 和 IIS 7 5 上运行 Delphi XE 开发 ISAPI 应用程序 IIS 配置正确 包括允许 32 位代码在 ISAPI 进程中运行 ISAPI进程运行正常 在 Delphi 中 我尝试附加
  • Chrome Inspect - 关闭预览框架

    在 Chrome 的最新更新中 检查 窗口 chrome inspect 有一个预览窗口 在屏幕移动框架中显示网页 我该如何关闭它 到目前为止 我所做的最接近的事情是减少宽度 这样它就不会占用太多的屏幕空间 图片示例 您可以使用下面突出显示
  • Docker 镜像 - 类型。修身 vs 修身弹力 vs 弹力 vs 高山

    我正在寻找一个 docker 镜像来构建一个 java 应用程序 并查看可用的 OpenJDK 镜像的变体 我正在看这里https github com docker library openjdk tree master 8 jdk ht
  • 如何正确地使JSP会话失效?

    所以问题就在这里 当用户退出我的网站时 他们仍然可以点击后退按钮并继续使用该网站 为了跟踪用户是否登录 我创建了一个会话属性 isActive 该属性在用户登录时设置为 true 并在注销时会话失效之前被 冗余 删除 另外 我在每个页面上检
  • 如何替换 Web API 模型绑定的行为,以便在没有传入参数时收到一个新实例而不是 Null

    我们有一个包含许多操作的 API 这些操作需要Filter目的 但是 当有人调用 API 方法并且不传递任何参数时 我们最终会得到空引用 为了避免在任何地方都必须检查这一点 我们希望改变模型绑定的行为 以便对于该类型它返回一个新实例而不是
  • OpenGL 中的透明 FrameBuffer 背景

    我想使用 glClear 和 glClearColor 用包括 alpha 透明度的颜色填充帧缓冲区 但是 当绑定到渲染到屏幕的纹理时 帧缓冲区始终呈现为不透明 我希望渲染到帧缓冲区的所有内容都保持其透明度 我只是想改变背景 请看下面的代码
  • ASP.NET C# - 使用用户控件的下拉列表

    我是 ASP NET 新手 这个论坛中的某人帮助我如何使下拉列表与用户控件一起使用并且它正在工作 在我的用户控制文件 VendorListControl ascx 中 我有下面的代码 请假设 VendorListControl ascx c
  • 在 Windows 10 驱动程序中将内核空间虚拟地址映射到用户空间虚拟地址

    我正在 Windows 10 64 位 中编写一个内核模式驱动程序 其主要目的是从 DMA 读取 我想知道是否不是将内存块从内核空间复制到用户空间中分配的缓冲区 我可以以某种方式向用户空间公开一个地址 当然不是物理地址 并节省内存复制操作
  • 返回 foreach 循环外部 var 中存储的所有值

    因此 我假设某些内容正在被覆盖 但我不确定如何停止此操作并检索循环外的所有值 有任何想法吗 foreach gallids as gallterm postterms wp get post terms gallterm type arra
  • 将 null 转换为任何类型

    Can null被转换为任何类型 即以下代码可以工作吗 public
  • 在 DynamoDB 中对关系数据进行建模(嵌套关系)

    实体模型 我已阅读有关创建的 AWS 指南在 DynamoDB 中建模关系数据 https docs aws amazon com amazondynamodb latest developerguide bp modeling nosql