【发布时间】:2020-11-29 04:53:51
【问题描述】:
我的发电机表中有两个实体:用户和订单。
每个user 都有0..* 订单,每个order 都有一个关联的user。每个order 也有一个orderDate 属性,用于描述下订单的时间。
我当前的表格结构如下,以便高效地检索特定用户的所有订单:
+--------------+----------------+--------------------------------------+
| PK | SK | Attributes |
+--------------+----------------+-------------+-----------+------------+
| | | name | firstName | birthDate |
+--------------+----------------+-------------+-----------+------------+
| USER#userid1 | META#userid1 | Foo | Bar | 2000-10-10 |
+--------------+----------------+-------------+-----------+------------+
| | | orderDate | | |
+--------------+----------------+-------------+-----------+------------+
| USER#userid1 | ORDER#orderid1 | 2020-05-10 | | |
+--------------+----------------+-------------+-----------+------------+
我现在有第二种访问模式,我想查询在特定日期下的所有订单(无论用户如何)(例如2020-05-10)以及下达订单的用户。
我正在努力处理我的表格设计中的这种访问模式。 GSI 和不同的主键似乎在这里都不起作用,因为我要么必须每天复制每个用户项目,要么无法与用户一起查询订单。
我的问题有什么优雅的解决方案吗?
【问题讨论】:
-
两个选项:要么复制用户信息并存储在订单记录中,要么使用第二个 getItem 来查询用户特定信息。
-
@jellycsc 好的,这就是我的想法 - 无论哪种方式都不是最佳解决方案。如果您再次发布它作为答案,我会接受它。
-
非规范化数据(复制用户信息)是解决方案的一部分,但仍然没有解决按订单日期搜索的问题。我在下面提供了一个不需要多次查询的解决方案的答案
标签: nosql amazon-dynamodb data-modeling dynamodb-queries amazon-dynamodb-data-modeling