是否更好地从两个不相关的表中读取数据或创建一个汇总它们的表?

时间:2016-03-24 13:03:53

标签: php mysql sql database

我需要表格:消息和收藏夹以及要提供的仪表板列表 消息表的结构如下:

from_user_id | to_user_id | message | timestamp

收藏夹表的结构​​如下:

user_id | fav_user_id | timestamp

仪表板列表必须像这样进给:
如果仪表板所有者(已登录用户)已交换消息或已收藏其他用户,则必须将此用户添加到仪表板列表中。
我的问题是:当需要加载仪表板时,通过读取两个表来填充仪表板或创建另一个名为“dashboard”的表来更好地填充仪表板,该表汇总了其他两个表内容并最终只读取仪表板列表从它? 注意:仪表板表的填充方式如下:当一个新行添加到表消息或收藏夹时,在仪表板表上进行检查以查看是否必须更新。

2 个答案:

答案 0 :(得分:0)

我会把它保存为两张桌子。将两者结合在一起意味着您可以在不需要时重复数据。类似于from_user_id | to_user_id |消息|时间戳| is_fav |将需要fav_timestamp,并且最后两列只是每条消息的相同数据,除非您希望跟踪该状态随时间的变化。

答案 1 :(得分:0)

听起来dashboard就像messagesfavorites中数据的缓存一样。

当你以这种方式思考时,你会问:

导出和缓存统计信息或直接从2个表中读取是否更好?

没有正确答案。但是,要明白以这种方式应用缓存我就是一个过早优化的案例,你可以谷歌。

在源数据和显示数据之间添加一层计算,只需添加一个地方即可:

  • 陈旧
  • 计算错误
  • 有过时的定义

如果您想更改messagesfavorites的行定义,您可能还需要更改dashboard的定义以保存新信息,您还需要更新插入新数据时更新dashboard的触发器/事件/回调。这可能听起来不是什么大问题,但当有人说'#34;这个页面上的数据是错误的"您将通过查看构成该页面的代码开始调试,而不是在更新另一页面上的数据时触发的隐藏回调/侦听器。

IMO,简洁性每次都胜过聪明。