首页 > 解决方案 > MySQL- 类似 Timeline 的 Twitter 数据库设计

问题描述

我正在开发一个应用程序,它需要在用户的时间轴上显示不同的帖子(比如 Twitter)。

用户的时间线包括以下内容:

  1. 报告哪个用户创建

  2. 报告其他用户创建并属于他/她的“警报位置”范围

  3. 他/她关注的其他用户发布的报告(即使该报告不在“警报位置”范围内)
  4. 报告由他关注的用户共享/转发(即使该报告不在“警报位置”范围内)
  5. 当用户旅行时,报告其他用户创建并落在他/她的“当前位置”半径范围内。
  6. 关注通知 - 当有人开始关注他/她时
  7. 消息通知 - 当有人向他/她发送消息时

注意:-一旦报告出现在用户的时间线中,即使用户移出位置半径或更改“警报位置”,它也不会消失。只有当它被删除或标记为不合适时,它才会消失。

要求:我需要一个最佳的数据库模式(带有 SELECT 查询),以便我可以在用户的​​时间轴上显示上述帖子。

这是我当前的数据库结构:

Table: users
   UserID (PK)
   email
   password

Table: alert_locations 
   alertLocationID (PK) 
   user_id (FK) 
   latitude 
   longitude 
   radius

Table: followers 
   follower_id (FK) 
   following_id (FK)(follower_id + following_id) = PK

Table: reports 
   reportID (PK) 
   reported_by_id (FK) 
   location 
   latitude 
   longitude 
   parent_id (FK- For retweet relations)

现在,考虑到上述时间线案例,我正在考虑timeline结构如下所示的表格:

Table Name: timeline
          timelineID  (PK)
          reference_id  (Can be report_id or follower_id or message_sender_id)
          user_id   (FK) 
          title
          type       (1:For Report, 2:Follow, 3:Message)

因此,当创建报表时,将为每个用户timeline插入一个有资格查看该报表的新行。使用此表,我可以查询所有类型的帖子以获取用户的时间线。timeline但正如我所见,这种方法似乎存在扩展问题,每次创建新报告时在表中插入“n”行似乎并不明智。

有没有其他更好的解决方案来实现这一目标?

标签: mysqldatabasedatabase-designschemarelational-database

解决方案


推荐阅读