mysql - MySQL- 类似 Timeline 的 Twitter 数据库设计
问题描述
我正在开发一个应用程序,它需要在用户的时间轴上显示不同的帖子(比如 Twitter)。
用户的时间线包括以下内容:
报告哪个用户创建
报告其他用户创建并属于他/她的“警报位置”范围
- 他/她关注的其他用户发布的报告(即使该报告不在“警报位置”范围内)
- 报告由他关注的用户共享/转发(即使该报告不在“警报位置”范围内)
- 当用户旅行时,报告其他用户创建并落在他/她的“当前位置”半径范围内。
- 关注通知 - 当有人开始关注他/她时
- 消息通知 - 当有人向他/她发送消息时
注意:-一旦报告出现在用户的时间线中,即使用户移出位置半径或更改“警报位置”,它也不会消失。只有当它被删除或标记为不合适时,它才会消失。
要求:我需要一个最佳的数据库模式(带有 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”行似乎并不明智。
有没有其他更好的解决方案来实现这一目标?
解决方案
推荐阅读
- python-3.x - RuntimeError: Unable to start JVM because of Deprecated: convertStrings
- kotlin - 如何在测试时使用 MicronautTest 和 Kotlintest 注入 bean?在科特林
- java - 如何将 servlet 配置为过滤器
- python - 循环两个列表并在 django 模型中附加项目
- sql - 将 SQL SP 结果分配给变量和求和结果
- android - 从启动器启动应用程序时 WebView 重置
- c++ - 递归如何使用栈数据结构?
- javascript - 提交后如何更新选项卡组件
- css - 材质按钮之间的间距
- c# - 将接口字典迭代为特定类型