在数据库中为用户“时间轴”活动建模的最佳方法

时间:2014-02-02 11:54:02

标签: php mysql sql database database-design

我目前正在建立一个基于网络的迷你社交网络。与Facebook一样,每个用户都有一个最近活动发布的时间表。这些活动包括状态更新,页面发布,添加新朋友和喜欢页面。

它们在数据库中使用这些表分别建模,各自列:

用户

  • USER_ID
  • 姓名
  • 名字

状态

  • STATUS_ID
  • USER_ID
  • 含量
  • 时间

发表

  • USER_ID
  • PAGE_ID
  • 含量
  • 时间

朋友

  • 朋友1
  • FRIEND2
  • 状态
  • 时间

LIKE

  • PAGE_ID
  • USER_ID
  • 时间

问题是,我需要以反向时间顺序显示所有这些活动。您可能会注意到,这些表中包含 time 列,但如果这些表具有不同的列,我将如何查询所有这些活动?关于我将如何执行这个的任何想法? TIA!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用@user_id作为参数创建存储过程,并在以下内容中进行以下查询:

SELECT status_id AS activity_id, time, "StatusUpdate" AS activity_desc 
FROM STATUS 
WHERE user_id = @user_id
UNION 
SELECT page_id AS activity_id, time, "LikePage" AS activity_desc 
FROM LIKE
WHERE user_id = @user_id
.
.
--Here specify selections from other tables as well
ORDER BY time DESC

我希望这会给你一个指向如何去做的指针。如果您正在寻找它,请告诉我。

附录:

上述查询会返回按时间顺序排序的不同类型的活动列表。现在,将此结果放在业务逻辑层中,您可以通过调用针对该特定活动类型的存储过程,根据其ACTIVITY_DESC字段获取特定活动的其他详细信息。存储过程可能如下所示:

CREATE PROCEDURE GetStatus @status_id INT
AS
SELECT * FROM STATUS
WHERE status_id = @status_id         

明智地获取详细信息也有助于提高性能,因为只有在需要在时间线页面上显示活动时才会获取活动的详细信息。