【发布时间】:2021-03-12 23:21:49
【问题描述】:
我正在创建一个应用程序来存储书签,每个书签可能有很多标签。我是 NoSQL 数据库的新手,不知道如何构建我的表。现在我有以下模型:
PK SK data
USER#1 USER some data
USER#1 BOOKMARK#1 bookmarkDetails
USER#1 LABLE#1 labelDetails
LABEL#1 BOOKMARK#1 bookmarkDetails
有了它,我可以查询所有用户书签和所有用户标签。但是我需要在书签中存储分配了哪些标签的详细信息,例如标题和颜色。但是当我想更新标签的详细信息并更改名称时会发生什么?我应该浏览所有书签并更新标签的标题吗?对于 DynamoDb,这意味着我需要发送许多请求来获取我需要更新的书签,然后发送更新请求。
是否可以将分配给书签的标签存储在 bookmarkDetails 中并将具有给定标签的书签存储在 labelDetails 中?如果我更改标签的标题或书签的标题,这将导致需要更新许多行。来自 RDS 世界,这似乎是压倒性的和巨大的开发工作。还有另一种表示多对多关系的方法吗?在这种情况下,我需要能够按标签获取所有书签,这就是我采用这种方法的原因。
编辑: 我在此处添加了需要更清晰的访问模式。
Entities:
User: ID and email
Bookmark: ID and url
Label: ID and title
Relations:
User to Bookmark = OneToMany
Bookmark to Label = ManyToMany
- 按用户 ID 获取所有书签 - 包括附加到给定书签的所有标签的详细信息
- 按用户 ID 获取所有标签
- 按标签 ID 获取所有书签 - 包括有关附加到给定书签的所有标签的信息
并且更新操作是能够更改标签标题和书签网址
【问题讨论】:
-
通过在应用程序中定义实体:用户、书签和标签,您有了一个良好的开端。下一步是明确定义您的应用程序需要支持的访问模式(例如,按用户 ID 获取书签)。你的访问模式对我来说并不明显,你能澄清一下吗?你想对用户、书签和标签做什么?
-
@SethGeoghegan 谢谢,我添加了访问模式。我觉得 Sarthak Jain 提出的解决方案是在应用程序级别上复制 RDS 而不是 NoSQL 方法。
标签: nosql amazon-dynamodb