我应该在数据库中复制数据吗?

nic*_*ico 2 mysql database

我有一个MySQL DB,包含网站页面的条目.假设它有以下字段:

Table pages:

id  |  title  | content | date | author
Run Code Online (Sandbox Code Playgroud)

每个页面都可以由用户投票,所以我还有另外两个表

Table users:
id  |  name  | etc etc etc

Table votes:
id  |  id_user | id_page | vote
Run Code Online (Sandbox Code Playgroud)

现在,我有一个页面,其中显示页面列表(一次10-50),其中包含各种信息以及页面的平均投票.

所以,我想知道它是否更好:

a)运行查询以显示页面(请注意,这在查询三个表时已经相当繁重)然后为每个条目执行另一个查询以计算平均投票(或者向主查询添加第四个连接?).

要么

b)在页面表中添加"平均投票"列,当用户对页面进行投票时,我将更新(与投票表一起).

尼科

Pau*_*ier 6

使用数据库来实现它的意义; 选项a是目前为止你最好的选择.值得注意的是,你的查询实际上并不特别重,加入了三个表; SQL真的很擅长这种事情.

谨慎对待这种过早优化SQL的尝试; SQL的功能远比大多数人认为的要高得多.

请注意,使用您的选项a的另一个好处是,维护的代码更少,并且在代码更新时数据发散的可能性更小; 这是一个生命周期的好处,而且它们经常被忽略,因为它们具有极小的优化优势.