类似 Google Reader 的应用程序的数据库架构和查询
为简单起见,我们假设我们有一个针对所有用户的单一 Feed。
该提要只是文章列表。
每个用户都可以自由地收藏某篇文章或将其从个人视图中删除。
用户删除文章不影响其他用户;每个用户都有自己的提要“视图”。
简单的方法
我设计的一个简单的方案如下:
(当然,在实际应用中,用户需要做的更多-文章关系而不仅仅是隐藏或加星标。)
问题
看起来应该在第一次更改选项后延迟创建链接表条目。否则,当新用户注册或弹出新文章时,我们必须创建大量空链接记录,并处理并发。
这意味着为某个用户选择文章列表是一个结合了以下内容的查询:
- 选择
ArticleUserLink
不存在的所有文章; - 选择存在
ArticleUserLink
且具有is_hidden = 0
的所有文章。
这里的答案是
OR
,还是有更有效的数据库设计/查询来解决问题?
For simplicity, let's assume we have a single feed for all users.
The feed is just a list of articles.
Each user is free to favorite a certain article or remove it from their personal view.
User deleting an article does not affect other users; each user has its own “view” of the feed.
Simple Approach
A naïve scheme I devised is below:
(Of course, in the real application there is more to user-article relationship than just hiding or starring.)
The Problem
It looks like the link table entry should be created lazily, after the first change of options. Otherwise, when a new user signs up, or a new article pops up, we'd have to create a lot of empty link records, and also handle concurrency.
This means selecting a list of articles for a certain user is a query that combines:
- selecting all articles for which
ArticleUserLink
does not exist; - selecting all articles for which
ArticleUserLink
exists and hasis_hidden = 0
.
Is
OR
the answer here, or is there a more effective database design / query to solve the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用内部查询怎么样?
how about using an inner query?
只需使用
LEFT JOIN
< /a>通过这种方式,您可以获得
Just use a
LEFT JOIN
This way you get
ua.is_hidden = 0