我需要显示用户在网站上的最后 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/