我正在开发我正在开发的应用程序,以便放到我的投资组合中。这是一个非常简单的应用程序,用户可以根据五星级系统对产品进行评论。我对web开发/数据库设计非常陌生,而且肯定还在学习过程中,所以我不确定处理这个问题的最好方法。
目前,我有一个用户表、一个产品表和一个名为"feedback“的表,该表存储投票、留下的任何评论以及链接到用户和产品的外键。当用户搜索产品时,它执行一个查询,从products表中选择产品,并将每个产品与其按平均值分组的相关投票联接起来。
一切都很好,但我很好奇保留反馈表是否更好,但在products表中添加一列来存储平均投票,该列在每次更新反馈表时都会更新。我的想法是,假设这个应用程序有数千个用户和数万张投票,那么每次有人执行搜索时查询每个产品的反馈表可能会很慢;而如果我将平均值存储在产品表中,那么只需要在新的/更新的投票中查询反馈表(或者如果有人想要查看产品的个人评论)。另一方面,在反馈表中存储平均投票似乎是多余的(我知道我存储的额外数据很少,所以它可能无关紧要,但我仍然想学习如何以正确的方式做事情!)
哪种方式的性能更好?还是说我想得太多了?
发布于 2020-02-08 05:23:38
经验法则是,您不应该存储任何可以从已经存储的数据轻松计算出的内容,特别是不应该存储在不同的表上-因为这样您就需要有一个同步机制(通常以触发器的形式),该机制将减慢数据操作(尽管无可否认不是很明显),并且将是数据库的另一部分需要维护。(更不用说让数据库记录每次数据更改的另一个操作,以及潜在的数据不一致。
给定适当的索引,从反馈表中计算特定产品的平均投票应该是一个相当快的操作,即使有相当多的数据。
https://stackoverflow.com/questions/60115996
复制相似问题