【问题标题】:Pre-joining students, classes, and grades in DynamoDB在 DynamoDB 中预加入学生、班级和成绩
【发布时间】:2021-05-20 21:25:51
【问题描述】:

我正在尝试使用单表设计对 3 个实体进行建模。他们是大学里的班级、年级和学生。学生有他们参加的每门课的成绩。一个学生可能上几个课,一个课可能有很多学生上。这是我的ER diagram

我的访问模式:

  1. 获取学生 ID 的成绩和班级信息
  2. 获取学生 ID 和班级 ID 的年级和班级信息
  3. 获取所有课程
  4. 按类 ID 获取类

我正在为这样的数据建模:TableInverted index

访问模式:

  1. 我不确定如何更改我的模型来完成此操作。有可能吗?
  2. 我可以查询 pk = class-ID、sk = class-ID OR student-ID
  3. 我可以在所有类上创建一个名为“type”的新字段并将其设置为“class”。我可以在类型字段上创建 GSI。然后我查询 GSI PK = class。
  4. 我可以查询 pk = class-ID。

我该怎么做#1?有没有更好的方法来做 #2 和 #3?

【问题讨论】:

  • 你有可以展示的代码示例吗?
  • @Beefster 我没有。我还没有写任何代码。这纯粹是一个数据建模和数据库设计问题。

标签: database amazon-web-services database-design amazon-dynamodb data-modeling


【解决方案1】:

我可以针对 1 和 3 提出以下建议:

  1. 复制所有学生的班级数据。这是 noSQL,如果数据将是“静态的”,您可能想要这样做。那么你只需要通过pk = student-ID查询
  2. 看起来不错
  3. 如果您将班级数据保留为不同的项目(您不应用第 1 点),您可以将 SK 更改为固定值,例如“班级”。这样,您将不需要额外的字段或额外的 GSI,您可以使用sk = class 的反向索引进行查询

【讨论】:

  • 太糟糕了,班级数据可能会改变,所以我不能为所有学生复制它。不能查询我想要的#1 吗?您的建议对#3 有好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多