【发布时间】:2021-05-04 07:20:36
【问题描述】:
我是 dynamoDB 和非 SQL 数据库的新手,正在努力设计。
我正在尝试为学校中的部门和部门每周安排的应用程序建模。最终,我想提供一个前端,用户可以在其中对部门执行 CRUD 操作——最初,如果部门只有一个名称就可以了。部门日程表由可以嵌入网页的 HTML 片段表示。部门日程安排在一年中的不同时间发生变化,并且在假期的几周内也会发生变化。对于给定的部门,我希望能够存储定义最常见每周时间表的模板,类似于“2021 夏季常规时间”。然后可以将这些每周模板复制到某个部门以用于一周的实际计划,例如“2021 小时 5 月 20210509”。
我的应用程序需要的数据访问是(从最常见到最少列出):
- 获取部门的每周计划
- 部门的 CRUD 每周计划。
- 部门的 CRUD 每周模板。
- 列出部门。
- CRUD 部门。
我一直在摆弄一个带有单个表的本地 dynamoDB 数据库。我最终得到了这个:
PK SK Attributes
============ =============== ==========
DEPT#Library PROFILE#Library { "departmentName": "Library", ... }
DEPT#Library TEMPLATE#2021 Summer Regular Hours { "departmentName": "Library",
"templateName": "2021 Summer Regular Hours",
"templateDisplay": "<table><tr><td>Sunday</td><td>1:00pm-5:00pm</td></tr>...</table>"}
DEPT#Library SCHEDULE#2021-05-09 { "departmentName": "Library",
"scheduleName": "2021-05-09",
"scheduleDisplay": "<table>...</table>"}
在我看到一个设计单个表来保存各种信息的示例之后,我打算将我的分区键和排序键命名为“PK”和“SK”。我不确定这是否是好的形式。
我认为这适用于我的大多数数据访问模式。但我一直在想出一个列出部门的好解决方案时遇到问题。我想出的是定义一个全局二级索引departmentNameIndex,AttributeName为departmentName,KeyType为HASH,ProjectionType为KEYS_ONLY。这确实允许我通过索引扫描表并检索所有部门名称。对 dynamoDB 中的表进行“扫描”是不是很糟糕?有没有更简单的方法可以达到同样的目的?
谢谢。
【问题讨论】:
标签: amazon-dynamodb