mysql - 类似 Google Reader 的应用程序的数据库模式和查询

标签 mysql sql database-design many-to-many

为简单起见,假设我们有一个所有用户的单一供稿

提要只是文章的列表。
每个用户都可以自由地收藏某篇文章或将其从个人 View 中删除。

用户删除文章不影响其他用户;每个用户都有自己的提要“ View ”。

简单方法

我设计的一个天真的方案如下:

user - article

(当然,在实际应用中,用户与文章的关系不仅仅是隐藏或加星标。)

问题

看起来应该在第一次更改选项之后延迟创建链接表条目。否则,当新用户注册或弹出新文章时,我们将不得不创建大量空链接记录,并处理并发。

这意味着为特定用户选择文章列表是一个结合了以下内容的查询:

  • 选择 ArticleUserLink 不存在的所有文章;
  • 选择 ArticleUserLink 存在且 is_hidden = 0 的所有文章。

Is OR the answer here, or is there a more effective database design / query to solve the problem?

最佳答案

使用内部查询怎么样?

SELECT * 
FROM Article a
WHERE NOT EXISTS(SELECT * FROM ArticleUserLink WHERE article_id = a.id AND (is_hidden IS NULL OR is_hidden != 0))

关于mysql - 类似 Google Reader 的应用程序的数据库模式和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902333/

相关文章:

java - 从通过java连接到同一路由器的另一台计算机访问SQL服务器数据库?

java - 用MySQL玩转2框架spring data

MySQL 函数 - 错误代码 : 1415 Not allowed to return a result set from a function

mysql - 测验分层数据的数据库结构?

带有主题和子主题的年级 MySQL 表设计

php - cakephp中通过外键显示数据

mysql - 如何获取(Mysql 表中不存在的 ID 列表?

SQL设置限制一个PK可以被引用多少次

java - Java 或 SQL 中的树遍历函数

sql - 我需要一个单独的表来描述 nvarchar(max)