database - Couchdb 架构 : Views or documents?

标签 database database-design architecture couchdb rss-reader

我正在尝试通过一个简单的 RSS 阅读器 Web 应用程序来学习 CouchDB。要求是:

  • 允许每个用户将 X 个提要导入他的列表
  • 用户可以为每个提要添加标签
  • 为每个提要维护数据库中最近 50 篇文章的列表

  • 每当用户订阅的任何提要添加新项目时,用户都应该得到更新。

阅读各种指南后,Principles for Modeling CouchDB Documents这是一个很好的相关问题,这是我想象的结构:

  • 提要

    • 姓名
    • 最后更新
  • 文章

    • FeedId
    • 职位
    • 正文
  • 用户

    • 编号
    • 提要:[feed1, feed2]
    • 标签:{funny: [article, article2]}//也许是一个带有#userid #articleid #tagname 的新数据库?

然后我会为每个用户创建一个 View ,其中包含按提要提供的文章,并向其中添加标签以在用户界面中显示它。

我走在正确的轨道上吗?你会如何构建它?

最佳答案

正如您可能已经看到的,NoSQL 完全是基于使用场景的妥协。在某些时候,您将不得不编写 View 和查询,并且没有一种设计适合所有人。

在您的场景中,您说过每个 Feed 将只有最新的 50 篇文章,因此这些文章很快就会变得无关紧要(与它们关联的任何数据也是如此)。因此,如果将标签存储在用户模型中,则必须更新用户对象三次:1 当用户标记文章时,2 当用户删除标签时,和 3 当文章变得陈旧并被删除时。 3 是不可避免的。

最好将标签存储在文章中,以便它们与文章一起被删除。

  • 提要

    • 姓名
    • 最后更新
  • 文章

    • FeedId
    • 职位
    • 正文
    • 标签:{ "tag-1": [ "user1", "user2", ... ], "tag2": [ "user3", "user4", ... ] }
  • 用户

    • 编号
    • 提要:[feed1, feed2]

您可以看到我正在存储按用户分组的标签。你也可以反过来 { "user1": "tag1", "user2": "tag1", "user3": "tag2", "user4": "tag2", ... }如果您认为这有助于处理(根据您的过滤要求)。

关于database - Couchdb 架构 : Views or documents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16510583/

相关文章:

asp.net-mvc - 如何保护用户上传的文件

php - 插入 MySQL 时的撇号问题

php - Laravel:从数据库中检索未分配的记录

php - 如果用户也使用 php 选择了用户名,则在 MySQL 表列中输入用户名

ruby-on-rails - rails 5 : Database design with iterations

mysql - 不删除数据库表

database - 许多类型实体的多对多关系

mysql - 处理多态关联: is there such a thing as "too many" LEFT JOIN?

linux - 操作系统如何抢占进程并重新获得控制权?

php - MVC - 用户输入验证 : controller, 模型或两者