Database 我可以在数据库多对多字段中使用计数器来减少查找吗?

Database 我可以在数据库多对多字段中使用计数器来减少查找吗?,database,caching,foreign-keys,relational-database,counter,Database,Caching,Foreign Keys,Relational Database,Counter,我试图找出访问存储在连接对象中的数据的最快方法。下面的例子对我的问题很有帮助,但上下文不同,因为我正在处理的实际数据集在关系上有些不直观 我们有三类:用户,产品,和评级。用户与产品有多对多关系,其中评级作为连接点/“通过”类 评级对象存储多个问题的答案,这些问题是1-5分制的整数评级(示例问题:产品的质量如何,产品的价值如何,产品的用户友好程度如何)。为简化起见,假设每个用户对他们购买的每个产品进行评分 现在,我想进行一个计算:对于一个用户,计算他们购买的所有产品的平均评级(即,所有其他用户的平

我试图找出访问存储在连接对象中的数据的最快方法。下面的例子对我的问题很有帮助,但上下文不同,因为我正在处理的实际数据集在关系上有些不直观

我们有三类:
用户
产品
,和
评级
。用户与
产品
有多对多关系,其中
评级
作为连接点/“通过”类

评级
对象存储多个问题的答案,这些问题是1-5分制的整数评级(示例问题:产品的质量如何,
产品的价值如何,
产品的用户友好程度如何)。为简化起见,假设每个
用户
对他们购买的每个
产品
进行评分

现在,我想进行一个计算:对于一个
用户
,计算他们购买的所有
产品
的平均评级(即,所有其他
用户
的平均评级,其中一个将来自该
用户自己)。然后,我们可以告诉用户“平均而言,您购买的产品价值为购买该产品的所有客户的3/5”


简单而缓慢的方法就是迭代用户的所有审阅对象。如果我们假设每个用户都购买了一个小(),这是正常的。它最终是缓存:对状态进行冗余编码,以使某些使用模式受益,而牺牲其他模式。当然,这也是一种复杂化

仅仅因为RDBMS的数据结构是关系,并不意味着你不能重新安排如何从一些简单的形式编码状态。例如,非规范化

(有时冗余设计(包括像您这样的设计)被称为“非规范化”,因为它们实际上不是非规范化的结果,并且冗余不是非规范化导致或规范化消除的那种。事实上,人们可以合理地将您的情况描述为涉及规范化而不保留FDs(功能依赖项)。从一个表开始,该表包含用户的
id
和其他列、它们的
评级
(关系)及其
计数器
。然后
评级
从功能上确定
计数器
,因为
计数器
=
选择计数(*)从评级
。分解为
用户
等+
计数器
,即表
用户
,和
用户
+
评级
,它们将分组到表
评级


你对谷歌搜索这个词的最佳术语有什么建议吗

我经常发表的评论:用谷歌搜索你的问题/问题/目标/需求的许多清晰、简洁和具体的措辞,以及各种术语和标签的子集,因为你可能会发现它们带有或不带有你的特定名称(变量/数据库/表/列/约束等)。例如“我什么时候可以存储(总和或总和)数据库中的冗余。人工措辞,而不仅仅是关键字,似乎有帮助。您最好的选择可能是优化SQL数据库设计以提高性能。有整本书('amazon isbn')、一些在线('pdf')(但可能主要是重新查询)。研究与仓库相关的技术,因为OLTP数据库充当OLAP数据库的输入缓冲区,并使用SQL处理大数据(例如快照调度)

PS我称之为“缓存”(tag也是我的典型)相当抽象,以至于有人开玩笑说CS中的一切都是缓存。(谷歌搜索…“计算机科学中只有两个难题:缓存失效和命名问题。”——菲尔·卡尔顿)(欢迎两个。)