处理时间线(MySQL)

处理时间线(MySQL),mysql,project,timeline,Mysql,Project,Timeline,我正在使用一个伪社交应用程序。 我们有3张桌子: Users: _id_, username, password, email Movies: _id_, title, synopsis Followers: __(#user_id1, #user_id2)__, timestamp U_Movies: __(#user_id, #movie_id)__, rating, timestamp 我们想在我们的应用程序中添加一个时间线,简单时间线,以及最近的活动。我们不需要自定义时间线(没有消息)

我正在使用一个伪社交应用程序。
我们有3张桌子:

Users: _id_, username, password, email
Movies: _id_, title, synopsis
Followers: __(#user_id1, #user_id2)__, timestamp
U_Movies: __(#user_id, #movie_id)__, rating, timestamp
我们想在我们的应用程序中添加一个时间线,简单时间线,以及最近的活动。我们不需要自定义时间线(没有消息),只需要活动

“创建”此时间表的最佳方式是什么?
是通过创建一个包含所有活动的“时间线”表(当有
插入追随者
U_电影
时,执行
插入时间线
),还是使用MySQL和
加入最新的追随者活动(加上时间戳,我认为如果有很多条目和用户,时间戳会很重),还有其他建议吗


感谢您的帮助!

您可以创建触发器,在更改时将其插入到第三个表中


查看mysql docs online中的触发器。

我最近做了类似的事情。您的第一个想法可能是最好的,将数据添加到新表中(通过触发器或其他插入)

假设您不这样做并在表上更新或删除,它应该可以很好地扩展。您还可以根据日期范围在MySQL中对表进行分区。这将在几年后保持性能(我的第一个版本在4年内有1.4亿行,仍然很快)

编辑-检测更改

使用触发器路由-将允许您比较列,然后在时间线中执行插入,以提供历史更改

CREATE TRIGGER upd_check BEFORE UPDATE ON account
  FOR EACH ROW
    BEGIN
     IF NEW.rating != OLD.rating THEN
       INSERT INTO timeline .. 
     END IF;
 END;
触发器(我会发现)似乎是最好的(和/或2个插入),但问题是我必须跟踪更改。例如,我们不仅有“评级”,还有“审查”,当有人想要更改数据时,客户会向我发送“评级=INT&review=TEXT”,然后我将更新数据库,即使它是相同的数据。有没有办法知道哪些collumns已更新?然后我将在
时间线中插入类型、新评级/评论…感谢您的帮助。