.net 论坛文档数据库设计

.net 论坛文档数据库设计,.net,database,database-design,ravendb,.net,Database,Database Design,Ravendb,我正在组织一个简单的论坛,作为深入研究dbs文档的一种方式——我认为这将是一个相对直接的建模方式 我搞不清楚这些文件应该如何存储。目前正在使用RavenDB,但我想其他doc也会如此。星展银行 所以基本上,有论坛,每个论坛都有一堆线程,每个线程都包含一堆帖子,这些帖子都是用户编写的 在我的脑海中,我把它描绘成每一个都是不同的文档,主要是因为每个论坛可能有数千个线程,每个线程可能有数千个帖子。拥有不明显的文档似乎会导致它们随着时间的推移变得庞大 查看列出所有帖子的页面时我想显示作者姓名(没什么大不

我正在组织一个简单的论坛,作为深入研究dbs文档的一种方式——我认为这将是一个相对直接的建模方式

我搞不清楚这些文件应该如何存储。目前正在使用RavenDB,但我想其他doc也会如此。星展银行

所以基本上,有
论坛
,每个论坛都有一堆
线程
,每个线程都包含一堆
帖子
,这些帖子都是
用户编写的

在我的脑海中,我把它描绘成每一个都是不同的文档,主要是因为每个
论坛
可能有数千个
线程
,每个
线程
可能有数千个
帖子
。拥有不明显的文档似乎会导致它们随着时间的推移变得庞大

查看列出所有
帖子的页面时
我想显示
作者
姓名(没什么大不了的)和
作者
帖子数量。这就是我被困的地方

我可以将
作者
姓名存储在帖子中,因为它不太可能更改,但是
作者
帖子数量将不断更改,因此这不能存储在
帖子

因此,现在如果我显示一个包含50篇文章的页面,我需要执行一个连接的关系等价物,以获得当前
作者
文章计数。这向我表明我做错了,除非文档数据库不适合这种情况

编辑
看起来在RavenDB中应该可以很好地处理这个问题,但我仍然想对可能的替代DB设计发表一些意见。

我正在考虑一个非常类似的情况。我得出了和你一样的结论。但是,我忘记了一些东西,也许你也忘记了同样的东西:文档数据库具有非常非规范化的性质。因此,您可以在ravenDB中使用实时投影,但对于特殊情况,因为通常要做的是复制数据。例如:

职位:

  • ThreadId(筛选所需)

  • 正文

  • 作者

  • AuthorUsername

  • AuthorLastLogin

  • AuthorAnything

通过这种方式,如果您以后需要,您可以获得作者id,但是您可以将最常用的数据非规范化,并且在没有联接或活动投影的情况下可用

在作者文章计数的情况下,必须使用map/reduce索引。这些指标正在不断更新。因此,当作者发表文章时,他的计数不会立即更新,但最终会保持一致。这是文档数据库的一个重要部分


希望这能有所帮助

你的结构基本上就是我所想的——在帖子中包含了非规范化的AuthorNames,我只是停留在AuthorPostCount上。。如果某人有10000个帖子。。另外,我不想用新的AuthorPostCount值来更新以前的10000篇文章文档。除此之外,如果加载一个包含50篇文章的页面,我也不想执行50个额外的查询来加载每篇文章的AuthorPostCount,即使是在它自己的索引中。。。我看。。。在同一个查询中,将所有50篇文章计数(如果作者发布了多篇文章,则计数会更少)都包含在一起,怎么样?类似于sql中的in子句,那么,我们是否将count变量存储在数据库中,以记录该用户的帖子数量?如果是这样,我们就不能创建另一个包含authorId、threadId和count的表了。count将给出作者在特定线程上发布的帖子数量。所以,如果我们想要那个作者的文章总数,我们可以把它们加起来。PS:我对数据库很幼稚。根据学校知识回答。