php - 用户 Activity (ala facebook)数据库方法。大 JOIN 或多个简单查询?

标签 php mysql facebook android-activity

我需要显示用户在网站上的最后 Activity 。 发布的评论、上传的图片/视频、投票的文章等等......

我有两个表:

user_activity”表,包含“userID”、“datetime”、“activityID”和“externalID”列。

activities”表,包含“activityID”和“activity”。

假设“activityID”= 4,那么我知道它会引用上传的视频(通过查看“Activity ”表),然后我还知道 externalID 从名为“的第三个表中引用”视频”。

对于每种类型的 Activity 都是一样的,如果它是评论,那么“externalID”将在“评论”表中重新定义为“reviewID”。

在显示用户 Activity 时,我不想只说用户上传了图片,还要显示上传的图片或视频或其他内容。

所以,

当查询用户上次 Activity 时,我可以通过两种方式获取数据:

1) 从 'user_activity' 表中获取数据,然后根据 'activityID' 对外部表(评论、视频、图像...)的每一行进行另一个查询。

2) 对所有表(user_activity、评论、视频、图像...)进行大的 LEFT OUTER JOIN,然后仅使用基于“activityID”的相关列。

所以方式 1 会导致大量的数据库查询,因为我需要对每个 Activity 行进行不同的查询。方式 2 将导致 BIG JOIN。

关于 PROS CONS 和方法更好的任何好的建议??

最佳答案

没有。

高流量站点的解决方案是denormalization这意味着您将拥有一些冗余数据,但您的用户 Activity 查询将非常简单,从单个表中获取所有必需的数据。

关于php - 用户 Activity (ala facebook)数据库方法。大 JOIN 或多个简单查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114784/

相关文章:

mysql - SQL,基于变量的日期X和X之间的总和

facebook - HWIOAuthBundle是否支持检索好友列表、性别、国家

php - 将数据库类与 PDO 一起使用

php - 在cakephp中插入数据

php - 有谁知道为什么这个 PHP 不会将数据写入我的数据库?

ios - 将 Facebook 好友姓名传递到文本字段时出现问题

Facebook 应用水平滚动条

php - 唯一的我会基于ip +端口

php - 为什么我的代码中的 MYSQL 存储过程调用不起作用

php - Wordpress 插入查询一次添加三条记录