我需要帮助来选择建模解决方案。
我有一张表A,其记录与表B中的许多其他记录有关。例如:文字(A)和收藏它的用户(B)或产品(A)x评论(B)。
所以...我想知道有多少人喜欢文字或评论过产品。好的,这很容易,因为它只是这种情况的一个查询,但是当我开始加入越来越多的表时会变得复杂。例如,要查找评论中包含的用户名或平均评论+评论中包含的照片+没有评论的产品,以及有相关评论但仍被屏蔽以进行审核等等。
不过,我知道可以对此进行查询,但是......
这是一个更好的解决方案如果表A有一列只是用于计算表B中有多少记录相关的列?喜欢Favorite_Count,review_count,review_avg,...
这将在复杂查询中“保存连接”,以换取当某人喜欢或不喜欢某事时更多的编码。最后,查询会更容易阅读,可能更快,对吗?
您怎么看?
答案 0 :(得分:0)
数据检索会更快。数据插入和更新会更慢。这是一个权衡。这取决于读取与写入的比率。
例如,调查StackOverflow如何做到这一点对您来说非常有价值。您可以检查数据库架构here。
例如,他们将AnswerCount
和Tags
放在Posts
表中,即使每次都可以通过额外的连接分别轻松检索Posts
(层次结构) )和PostTags
。
在我看来,他们选择了它,因为这些信息通常是阅读而不是更新。想象一下,有多少用户浏览帖子列表,以及实际点击每个帖子的用户数量。要在主页上构建帖子列表,每次有人刷新时都需要额外的时间来执行这些联接。这将是值得注意的交通,不是吗?
但是,这一切都取决于你的情况。没有最好的方法"在这种情况下。
答案 1 :(得分:0)
我已经为这个问题建立了索引视图的良好体验。这些非常适合计数计算。与“普通”视图相比,记录作为索引存储在Sql-Server中,并且在更改涉及的表时会自动更新。然而,这些具有一些限制,例如,架构绑定是必需的,您只能使用内部连接,....我会创建多个索引视图,然后查询它们。有关更多信息,请参阅MSDN Create Indexed Views。
view.delegate = (SomeHandMadeViewDelegateWhichDefinesScrollViewDidScroll as! UIScrollViewDelegate)