Mysql AWS DynamoDB表格结构?

Mysql AWS DynamoDB表格结构?,mysql,database,data-structures,amazon-dynamodb,nosql,Mysql,Database,Data Structures,Amazon Dynamodb,Nosql,出于以下目的,在DynamoDB上构造表的最佳方法是什么 如果我制作了一个电影评论应用程序,我需要一个包含该电影评论的电影页面,以及包含用户在该应用程序上编写的所有评论的用户帐户页面 电影表 ------------------------- | movie_id | movie_name | ------------------------- --------------------------------------------------- | review_id | movie_id

出于以下目的,在DynamoDB上构造表的最佳方法是什么

如果我制作了一个电影评论应用程序,我需要一个包含该电影评论的电影页面,以及包含用户在该应用程序上编写的所有评论的用户帐户页面

电影表

-------------------------
| movie_id | movie_name |
-------------------------
---------------------------------------------------
| review_id | movie_id | user_id | review_content |
---------------------------------------------------
审查表

-------------------------
| movie_id | movie_name |
-------------------------
---------------------------------------------------
| review_id | movie_id | user_id | review_content |
---------------------------------------------------
这对DynamoDB有意义吗?所以我可以查询 电影页面上的
movie\u id
movie\u name
和列表
review\u content
by
movie\u id
然后 通过用户帐户页面上的用户id查询
查看内容


提前感谢。

与RDBMS一样,您不需要规范化数据,即不创建两个不同的表。NoSQL数据库的要点是尽可能将用例所需的大部分数据保存在一个表中

假设上述数据不会超过某个项目的400 KB最大限制(即DynamoDB中某个项目的最大限制),则可以将所有数据保存在一个表中

建议的数据模型:-

movie id 1, user id 1, movie name 1, review comments 1
movie id 1, user id 2, movie name 1, review comments 2
movie id 2, user id 3, movie name 2, review comments 1
创建一个名为“电影”的表,其中包含所有必需的信息。用例的好处是您知道分区键,即
movie\u id
。您可以使用DynamoDB中可用的查询API通过
movie\u id
获取数据,这将为您提供为
movie\u id
编写审阅注释的所有
用户id

在这种方法中,您不需要从另一个表中单独获取审查数据,这将为您节省成本并提供更好的性能

电影表:

电影\u id==>分区密钥

用户id==>排序键

电影名称

复习

复习内容

注意:-

movie id 1, user id 1, movie name 1, review comments 1
movie id 1, user id 2, movie name 1, review comments 2
movie id 2, user id 3, movie name 2, review comments 1
我不理解
review\u id
的目的,除非您有一个单独的用例通过
review\u id
获得详细信息

编辑-Json格式:-

movie id 1, user id 1, movie name 1, review comments 1
movie id 1, user id 2, movie name 1, review comments 2
movie id 2, user id 3, movie name 2, review comments 1
user\u id
是一个排序键。它应该在
评论
之外

{
  "movie_id" : 1,
  "user_id" : "1"   
  "movie_name" "Name of movie",
  "review_comments" : ["A great movie", "I love it"]                
}
分区和排序键:-

movie id 1, user id 1, movie name 1, review comments 1
movie id 1, user id 2, movie name 1, review comments 2
movie id 2, user id 3, movie name 2, review comments 1
对于复合主键(分区键和排序键),必须 按此顺序提供两个元素:第一个元素必须 具有哈希的KeyType,第二个元素的KeyType必须为 射程

分区键和排序键—由两个键组成的复合主键 属性。第一个属性是分区键,第二个属性是 属性是排序键。DynamoDB使用分区键值作为 输入到内部哈希函数;哈希函数的输出 确定存储项的分区。所有带有 相同的分区键按排序顺序存储在一起 键值。两个项目可能具有相同的分区键 值,但这两个项必须具有不同的排序键值

在上面的模型中,我们有唯一标识项(即RDBMS中的记录)的哈希和排序键。散列键是
movie\u id
,排序键是
user\u id
。一个电影id可以有多个用户id,这些用户id在DynamoDB表中形成多个项(即RDBMS术语,称为记录)

示例:-

movie id 1, user id 1, movie name 1, review comments 1
movie id 1, user id 2, movie name 1, review comments 2
movie id 2, user id 3, movie name 2, review comments 1

正如我们前面所讨论的,
review\u comments
是一种Dynamodb列表或集合数据类型,可以有多个值。

谢谢您或回复@conceptQuest我还没有使用Dynamodb,对您的表结构有疑问。如果一部电影有多个评论,数据是如何存储的?它将具有相同的数据,除了
查看内容
?它来自同一个用户。如果同一个用户为同一部电影编写评论,您可以将“评论”属性设置为“设置”或“列表”数据类型,以便存储多个评论。更新了答案中的结构。用户id应该在评论之外。谢谢。这说明了一个用户如何进行多个审阅,但我如何使用该方法对多个用户在
电影上进行审阅\u id:1
?我已更新了有关分区和排序键的详细信息。希望它能澄清你的疑问。若并没有,请阅读DynamoDB表的分区和排序键。