mysql - 如何在 mySQL 表中存储多个用户的书签?

标签 mysql database-design

假设我有用户 u1,u1,u3...

和书签 b1,b2,b3....

如何最有效地存储书签。

每个用户都有自己的一组加载到其页面上的书签。然后,如果用户想知道还有谁拥有相同的书签,他可以选择该书签并查看也拥有该书签的用户列表。

这只是一个关于总体设计的问题。如果到目前为止我的理解是正确的,那么这是一种多对多的关系。

最佳答案

常见的方法是使用第三个表(多对多关系),您还可以在此表中存储时间戳来确定用户添加书签的时间或用户对其书签的特定评论。

此方法的另一个优点是书签表不存储任何用户特定数据或具有重复条目(相同书签的 4 次导致 4 个用户添加了它)

+-------------------+
| bookmarks_users   |
|-------------------|
| id (int, primary) |
| user_id (int)     |
| bookmark_id (int) |
+-------------------+

选择一个用户的所有书签(只是一个基本查询 - 您也许应该加入所需的数据;))

SELECT bookmark_id
FROM bookmarks_users
WHERE user_id = 123

选择具有特定书签的所有用户

SELECT user_id
FROM bookmarks_users
WHERE bookmark_id = 123

显示具有至少一个公共(public)书签作为指定用户的用户(此查询非常糟糕(性能方面),但它可以作为一个很好的示例)

SELECT DISTINCT user_id
FROM bookmarks_users
WHERE bookmark_id IN(
    SELECT bookmark_id
    FROM bookmarks_users
    WHERE user_id = 123
)
AND user_id != 123

希望这有帮助 - 蒂姆

关于mysql - 如何在 mySQL 表中存储多个用户的书签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6147135/

相关文章:

mysql - 如何在不丢失对象的情况下在 MySQL Workbench 中转发工程师?

php - 实体上的 MySQL Double 多对多

php - PHP 搜索时漏掉一个字符怎么办?

php - 用于记录尝试插入已存在行的列

Mysql - 连接查询的总和计数结果

c# - 构建远距离查询数据库和程序的最佳方式

database - N-gram数据库的查找策略

sql-server - 表设计 - 宽表与作为属性的列

php - 在 Cakephp 中,如何在同一查询中从不同数据库获取数据?

mysql - Bookshelf、Knex 和 mysql 保存对象列表